見出しの関数名は[[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
```