Scala: Stream の再帰的な定義でエラー
自分自身を参照するような Stream を定義したら、エラーが出た。
エラーが発生する例
scala> def f(x: Int) = {
| val xs: Stream[Int] = x #:: xs.map(_ + 1)
| xs.tail
| }
:17: error: forward reference extends over definition of value xs
val xs: Stream[Int] = x #:: xs.map(_ + 1)
^
対応方法
lazy val にすれば OK。
scala> def f(x: Int) = {
| lazy val xs: Stream[Int] = x #:: xs.map(_ + 1)
| xs.tail
| }
f: (x: Int)scala.collection.immutable.Stream[Int]
scala> f(3).take(10).toList
res8: List[Int] = List(4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
0 件のコメント:
コメントを投稿