私は無限のストリームを持っており、当然のことながら、そこから何らかの要素まで「プル」する必要があります。これが最初のステップです。ただし、「プルされた」要素の一部のみが 2 番目のステップで使用されます。たとえば、偶数要素のみが使用されます。遅延によって奇数要素の処理を回避することは可能ですか?
私が求めていることを説明するより良い方法は、コードを示すことです:
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26).
Type in expressions to have them evaluated.
Type :help for more information.
scala> var n=0; def numbers:Stream[Int] = {n += 1; println("n= " + n); n #:: numbers}
n: Int = 0
numbers: Stream[Int]
scala> numbers.map{z => println("z^2= " + z*z) ; z*z}.take(10)(2)
n= 1
z^2= 1
n= 2
z^2= 4
n= 3
z^2= 9
res0: Int = 9
scala> var n=0; def numbers:Stream[Int] = {n += 1; println("n= " + n); n #:: numbers}
n: Int = 0
numbers: Stream[Int]
scala> numbers.map{lazy z => println("z^2= " + z*z) ; z}.take(10)(2)
<console>:1: error: lazy not allowed here. Only vals can be lazy
numbers.map{lazy z => println("z^2= " + z*z) ; z*z}.take(10)(2)
^
scala>
の結果は であるため、take(10)(2)
実際に必要なのは計算res0: Int = 9
だけです。z^2= 9