我希望您能输出一串数字,但以下代码只输出序列中的第一个数字:
在Haskell中,以下代码会一直打印数字直到被打断,我希望在Scala中实现类似的行为:
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,
Stream
的()
。因此,你只会得到一个值2
的输出,这是因为 Scala REPL 需要打印res4: .... = Stream((), ?)
,而这只需要计算一个()
。如果你删除yield
,它将成为一个不同的循环,你应该会得到一个无限流的偶数输出。 - Sassa NFforM [n | n <- naturals, even n] (putStrLn . show)
,其中组合函数(putStrLn . show)
包含实际将数字打印到屏幕上的逻辑(与Scala中的println
类似)。 - KChalouxs
是一个Stream
,那么使用s foreach println
逐行打印s
的元素。(3) 但是Scala解释器很愚蠢,按下Ctrl-C会终止解释器(而不是正在运行的循环),因此如果s
太长(或无限),您可能只想打印有限数量的项。 - ShreevatsaR