無限リスト

作ってみる。

  • 平方数
scala> val s = Stream from 1 map(x => x * x)
s: Stream[Int] = Stream(1, ?)

scala> s take 16 foreach(printf("%d ", _))
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256
  • 繰り返し
scala> Stream from 0 map(x => x % 3 + 1) take 20 foreach(printf("%d ", _))
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
  • 素数
scala> val p = Stream from 2 filter(x => !((2 to x - 1) exists(x % _ == 0)))
p: Stream[Int] = Stream(2, ?)

scala> p(19)
res39: Int = 71

scala> p take 20 foreach(printf("%d ", _))
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71
  • 追記

繰り返し

scala> Stream const(1 to 3) flatMap(x => x) take 10 print
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, Stream.empty

参考:
inforno :: Scalaで無限リスト:Haskellライクに