首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >灵丹妙药Stream.unfold建立新状态

灵丹妙药Stream.unfold建立新状态
EN

Stack Overflow用户
提问于 2017-09-16 15:32:10
回答 1查看 381关注 0票数 1

下面是一个使用Stream.unfold显示fibonacci序列的例子。

代码语言:javascript
复制
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}的新状态。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-16 15:42:39

这是因为f1是应该由流生成给使用者的值,而{f2, f1 + f2}是下一次迭代所需的展开操作所需的状态。生成Fibonacci数需要状态中的两个值才能工作。

如果您生成的是自然数,则可以使用两个整数的元组:

代码语言:javascript
复制
iex(1)> Stream.unfold(0, fn x -> {x, x + 1} end) |> Enum.take(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46255524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档