-- The function is an argument: it is called
-- inside for every item
local function map(list, transform)
local result = {}
for _, item in ipairs(list) do
result[#result + 1] = transform(item)
end
return result
end
local function filter(list, test)
local result = {}
for _, item in ipairs(list) do
if test(item) then
result[#result + 1] = item
end
end
return result
end
local numbers = {2, 3, 1, 7, 9}
-- A lambda is written right in the call
local numbers1 = map(numbers, function(x)
return x * 2 + 1
end)
-- numbers1 = 5, 7, 3, 15, 19
local numbers2 = filter(numbers, function(x)
return x % 3 == 0
end)
-- numbers2 = 3, 9
print("numbers1 = "
.. table.concat(numbers1, ", "))
print("numbers2 = "
.. table.concat(numbers2, ", "))