Drkcore

20 10 2011 Scala Tweet

Stream[<empty>.Int]

こんなのを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)に問題があるのか、環境変数なんかおかしいかくらいしか考えられないが、同じような問題を抱えてるヒトをググってみても全然出てこないのが、自分固有の問題臭を漂わせているわけでなんかボケたことをやっている気がしないでもない。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021