Funciones de orden superior en Lua
map y filter son ayudantes de tres líneas sobre ipairs.
-- Higher-order helpers are three lines each in Lua.
local function map(t, f)
local out = {}
for i, v in ipairs(t) do out[i] = f(v) end
return out
end
local function filter(t, keep)
local out = {}
for _, v in ipairs(t) do
if keep(v) then out[#out + 1] = v end
end
return out
end
local hauls = { 12, 45, 3, 78, 22 }
local doubled = map(hauls, function(g) return g * 2 end)
print(table.concat(doubled, " "))
local rich = filter(hauls, function(g) return g > 20 end)
print("Big hauls: " .. table.concat(rich, ", "))
Cómo funciona
maparma una tabla nueva aplicandofcasilla por casilla.filteragrega conout[#out + 1]cuando la prueba pasa.- Las funciones anónimas ponen la transformación en la llamada.
Palabras clave y builtins usados aquí
doendforfunctionifinipairslocalprintreturnthen
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 514
- Tokens
- 149
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 138 segundos.
Paso 2 de 3 en Clausuras; paso 15 de 27 en Fundamentos del lenguaje.