unfold
unfold
<lst>:unfold(foo(x, item, pos), initval)
Riempie lst con il risultato della computazione di foo. foo viene eseguita finché ritorna un valore diverso da nil. foo riceve in ingresso il valore della computazione precedente o initval.
local a = XTable({}) :unfold(function(x) return (x <= 10) and x+1; end, 0)
:astable()
-->{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
-- calcola la sequenza di Fibonacci (valori minori di 1000)
local a = XTable({})
:unfold(function(x)
if x[2] > 1000 then return end
return {x[1]+ x[2], x[2] + x[1] + x[2]}
end, {1, 1})
:selectmany(function(tuple) return tuple end)
:astable()
--> {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987}