読者です 読者をやめる 読者になる 読者になる

Haskellでエラトステネスの篩

プログラミング Haskell 練習

先日Pythonで実装してみました。Haskellでもできたので書いておきます。

getPrimeList [] = []
getPrimeList (x:xs) = x : getPrimeList [y|y<-xs,mod y x /= 0]

getPrimeListN n = getPrimeList [2..n]

すごく短いですね。さすがHaskellです。まずgetPrimeListでは渡されたリストから先頭の数(つまり素数)を素数のリストに追加しつつ残りのリストからその数で割り切れない数を素数の候補として再帰的にgetPrimeListに渡しています。
リストが空になったらパターンマッチを使って空のリストを使って終了です。
あとは使いやすいようにNまでの素数を返す関数としてgetPrimeListNを定義してみました。
コードがアルゴリズムを素直に表現してていいですね。
ただ、まだ全然文法に慣れていないのですごいH本を参照しつつ、エラーを出しつつな状況...もっとHaskellかけるようになりたいものです。