0
下面是使用Stream.unfold
显示含酏剂的斐波纳契序列的示例。Elixir Stream.unfold设置新状态
Stream.unfold({0,1}, fn {f1,f2} -> {f1, {f2, f1+f2}} end) |> Enum.take(15)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
为什么它需要提供在{f1, {f2, f1+f2}}
f1
并不仅仅是{f2, f1+f2}
?
因为在上述作者的代码的解释说:
新状态移动一个向下的顺序,所以 {F1,F2}的初始状态变为{F2,F1的一个新的状态+ F2}。
对不起,所以在下面的部分'{F1,{F2,F1 + F2}}' - 'f1 = f2(当前迭代)'和'f2 = f1 + f2(用于下一次迭代)',对吗? (基本上它只是嵌套) – kirqe
是的,如果状态是'{a,b}',下一个状态是'{b,a + b}',并且现在产生的值是'a'。 ('a'和'b'比'f1'和'f2' IMO更容易遵循)。 – Dogbert