unfold

LUA

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.

Esempio 228. Esempio unfold

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}