在过去的几天里,我一直在通过 Learn You A Haskell 学习 Haskell。我一直在尝试完成一些 Project Euler 问题,其中一些需要素数。但是,我编写的尝试生成一些函数(在本例中为低于 20000 的素数)的函数输出不正确。当我运行它时,GHCi
返回'[1, '并且似乎不会终止。我正在使用的代码是:
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
。我知道该功能可能效率低下,我主要是就我必须犯的语法/过程错误寻求帮助。
谢谢