scala> val s = for(i <- (1 to 10).toStream) yield { println(i); i }
1
s: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> s.take(8).toList
2
3
4
5
6
7
8
res15: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
scala> s.take(8).toList
res16: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
アクセスを最適化するために、Scala がストリーム値をメモリに格納しているようです。つまり、Stream
メモリを割り当てるため、命令型ループの代わりとして使用することはできません。のようなもの(for(i <- (1 to 1000000).toStream, j <- (1 to 1000000).toStream) yield ...).reduceLeft(...)
は、メモリのために失敗します。このようにストリームを使用するのは間違った考えでしたか?