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

Haskell GHCi打印延迟序列,但Scala REPL不打印

发布时间:2020-12-16 09:06:53 所属栏目:安全 来源:网络整理
导读:我想打印出一个数字流,但下面的代码只打印出序列中的第一个数字: for ( n - Stream.from(2) if n % 2 == 0 ) yield println(n)2res4: scala.collection.immutable.Stream[Unit] = Stream((),?) 在Haskell中,以下内容会一直打印出数字,直到被打断,我想在Scal
我想打印出一个数字流,但下面的代码只打印出序列中的第一个数字:

for ( n <- Stream.from(2) if n % 2 == 0 ) yield println(n)
2
res4: scala.collection.immutable.Stream[Unit] = Stream((),?)

在Haskell中,以下内容会一直打印出数字,直到被打断,我想在Scala中使用类似的行为:

naturals = [1..]
[n | n <- naturals,even n]
[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,

解决方法

而不是仅仅产生println(为什么人们会想要无限的单元序列?):

for ( n <- Stream.from(2) if n % 2 == 0 ) println(n)

如果你真的想要无限的单位序列,强制结果:

val infUnit = for ( n <- Stream.from(2) if n % 2 == 0 ) yield println(n)
infUnit.force // or convert to any other non-lazy collection

虽然,最终它会崩溃程序(由于物化序列的大量长度).

(编辑:李大同)

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

    推荐文章
      热点阅读