こんなのをREPLで動かすと普通に動くんだけど
def sieve(s: Stream[Int]): Stream[Int] = Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0))) val ps = sieve(Stream.from(2)) println(ps.tail.head)
スクリプトで動かそうとすると、型が違うよって怒られます。
$ scala e.scala /Users/kzfm/scala/e.scala:4: error: type mismatch; found : scala.collection.immutable.Stream[scala.Int] required: Stream[<empty>.Int] val ps = sieve(Stream.from(2)) ^ /Users/kzfm/scala/e.scala:2: error: value % is not a member of Int Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0))) ^ two errors found
これはいったい何なんでしょう?
追記
ubuntuの2.9.1.finalではエラーが出なかったが、mac osxの2.9.1.final (Java 1.5.0_30)だと出た。JDK 1.6.0_26+Scala 2.9.1だと動くという情報を頂いたので、javaのバージョンを上げてみたが、結果は変わらなかった。
よくかんがえてみればREPLで動かせば動くので、javaの問題ではない気はする。
それから以前、よくわからなかったIntじゃなくてScala.Intにしないといけない理由も同じあたりに問題があるような気がしてきた。
残るのはMacのバージョン(10.5)に問題があるのか、環境変数なんかおかしいかくらいしか考えられないが、同じような問題を抱えてるヒトをググってみても全然出てこないのが、自分固有の問題臭を漂わせているわけでなんかボケたことをやっている気がしないでもない。