見出しの関数名は[[JavaScript]]や[[Rust]]などで一般的に利用されているものに由来する。 ## map ```lua ---@generic T, U ---@param tbl T[] ---@param fn fun(x: T): U ---@return U[] function map(tbl, fn) local result = {} for k, v in pairs(tbl) do result[k] = fn(v) end return result end ``` ## find ```lua ---@generic T ---@param tbl T[] ---@param predicate fun(x: T): boolean ---@return T | nil function find(tbl, predicate) for _, item in ipairs(tbl) do if predicate(item) then return item end end return nil end ``` ## reduce ```lua ---@generic T, A ---@param tbl T[] ---@param fn fun(acc: A, x: T): A ---@param init A ---@return A function reduce(tbl, fn, init) local acc = init for _, v in ipairs(tbl) do acc = fn(acc, v) end return acc end ``` ## head_while ```lua ---wordとマッチする要素の直前までの配列を返す ---@param arr string[] ---@param word string ---@return string[] function head_while(arr, word) local result = {} for _, value in ipairs(arr) do if value == word then break end table.insert(result, value) end return result end ```