Scala: Stream の再帰的な定義でエラー
自分自身を参照するような Stream を定義したら、エラーが出た。
エラーが発生する例
1 2 3 4 5 6 7 | 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。
1 2 3 4 5 6 7 8 | 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 res 8 : List[Int] = List( 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 ) |
0 件のコメント:
コメントを投稿