Martin Odersky の著書「Programming in Scala」には、関数 fibFrom に引数として渡された 2 つの数値から始まるフィボナッチ数列を計算する例があります。
def fibFrom(a: Int, b: Int): Stream[Int] =
a #:: fibFrom(b, a + b)
メソッド take() をこの再帰関数に適用すると、次のようになります。
fibFrom(1, 1).take(15).print
出力は次のようになります。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, empty
この出力は経験豊富な人にとっては明らかかもしれませんが、このメソッド take() がストリームをさらに計算する方法を正確に理解していません。15 はどういうわけか非自明に fibFrom() に渡されますか?