以前、こちらの記事を参考にした、「Haskell で素数を列挙するコード」に関する記事をアップしましたが、その後も、ちょこちょことコードをいじって改良を加えてきました。 ある程度納得のいくコードができたので、現在使っているコードの紹介をしてみたいと思います。 primes :: Integral a => [a] primes = map fromIntegral ([2, 3] ++ primes' :: [Int]) where primes' = 5 : sieve [] primes' 7 sieve divs (x : xs) n = ps ++ sieve (divs ++ [x]) xs (x * x) where isPrime m = and [rem m x /= 0 | x <- divs] ps = filter isPrime ns ns = [y + z | y