5.19.2013

Sieve of Eratosthenes in Scala

Scala: エラトステネスのふるい

Stream の使いどころが少しずつ分かってきた。
エラトステネスのふるいがこんな簡潔に書けるのは衝撃的。

  • コード
def from(n: Int): Stream[Int] = n #:: from(n + 1)    // 整数の Stream を作る
def sieve(s: Stream[Int]): Stream[Int] =
  s.head #:: sieve(s.tail.filter(_ % s.head != 0))
sieve(from(2)).take(20).print
  • 出力
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, empty

0 件のコメント:

コメントを投稿