加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – foldRight无限懒人结构

发布时间:2020-12-16 09:32:24 所属栏目:安全 来源:网络整理
导读:根据 http://en.wikipedia.org/wiki/Fold_(higher-order_function),如果不需要评估完整列表,则右折叠可以在无限列表上操作。这可以在haskell的行动中看到: Prelude take 5 (foldr (:) [] [1 ..])[1,2,3,4,5] 这对于流的scala似乎不起作用: Stream.from(1
根据 http://en.wikipedia.org/wiki/Fold_(higher-order_function),如果不需要评估完整列表,则右折叠可以在无限列表上操作。这可以在haskell的行动中看到:

Prelude> take 5 (foldr (:) [] [1 ..])
[1,2,3,4,5]

这对于流的scala似乎不起作用:

Stream.from(1).foldRight(Stream.empty[Int])( (i,s) => i #:: s).take(5)
// StackOverflowError

或迭代器:

Iterator.from(1).foldRight(Iterator.empty: Iterator[Int]){ (i,it) => 
  Iterator.single(i) ++ it
}.take(5)
// OutOfMemoryError: Java heap space

在Scala中实现懒惰折叠有实际的解决方案吗?

解决方法

This article做出了同样的观察,并提出了使用scalaz的懒惰解决方案。信给作者,托尼·莫里斯。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读