7

我是一名 Scala 初学者,正在使用Project Euler练习我的 FP 技能。

在研究问题 5:可以被 1 到 20 的所有数字整除的最小正数是多少”时,我比较了基于范围和基于流的解决方案:

val r1 = Range(20, Int.MaxValue).find(i => (2 to 20).forall(i % _ == 0)).get
val r2 = Stream.from(20).find(i => (2 to 20).forall(i % _ == 0)).get

奇怪的是,r1 的计算大约在 20 秒内完成,而 r2 的基于流的计算内存不足。我会预料到相反的情况——有人能解释一下吗?

4

1 回答 1

7

For range it always takes fixed size of memory.

For stream it will cache all the element you are even used. So during find stream in r2 is keep increase until out of memory.

于 2012-11-03T06:43:34.790 回答