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 件のコメント:
コメントを投稿