ここ数日、Learn You A Haskell を通じて Haskell を学んでいます。Project Euler の問題をいくつか解こうとしてきましたが、その中には素数が必要なものもあります。ただし、いくつか (この場合は 20000 未満の素数) を生成するために作成した関数は、正しく出力されません。実行すると、「[1、」GHCi
が返され、一見終了しません。私が使用しているコードは次のとおりです。
sieve :: (Integral a) => a -> [a] -> [a]
sieve 20000 list = list
sieve n (x:xs) = sieve (n+1) $ x:(filter (\q -> q `mod` n /= 0) xs)
primesto20000 = sieve 2 [1..20000]
そして、私は電話してprimesto20000
います。関数が非効率的である可能性があることを理解しています。主に、私が犯したに違いない構文/プロセスエラーについて助けを求めています.
ありがとうございました