首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FS2在Scala中实现递归斐波纳契序列?

如何使用FS2在Scala中实现递归斐波纳契序列?
EN

Stack Overflow用户
提问于 2016-09-09 17:27:06
回答 1查看 758关注 0票数 5

在尝试熟悉FS2时,我遇到了一个使用Scala集合流的nifty recursive implementation,并认为我可以尝试在FS2中尝试它:

代码语言:javascript
复制
  import fs2.{Pure, Stream}
  val fibs: Stream[Pure, Int] = Stream[Pure, Int](0) ++ fibs.fold[Int](1)(_ + _)
  println(fibs take 10 toList) // This will hang

这在FS2中挂起的原因是什么,以及获得类似的工作解决方案的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-09 17:38:26

您的问题是,Stream.fold消耗流的所有元素,从折叠中生成一个单一的最终值。注意,它只发出一个元素。

只有在发出10个元素(由take 10指定)时,递归流才会终止。由于这个流的生产力不够,fold继续添加值而不停止。

解决这一问题的最简单方法是使用一个组合器,它从折叠中发出部分结果;这是scan

而且,FS2可以推断这段代码中的大多数类型,因此您不一定需要那么多类型注释。

以下实现应该运行良好:

代码语言:javascript
复制
import fs2.{Pure, Stream}
val fibs: Stream[Pure, Int] = Stream(0) ++ fibs.scan(1)(_ + _)
println(fibs take 10 toList)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39416841

复制
相关文章

相似问题

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