1

我正在尝试通过递归来实现素数,我知道如何使用列表来实现。

函数绑定中的类型错误

primes :: [Int]   
primes = sieve [2..10]   
sieve[] = []   
sieve(x:xs) = x : sieve (filter p [xs])    
   where p x = xs `mod` x > 0

我也尝试过使用地图并在应用程序中出现类型错误

primes :: [Int]   
primes = sieve [2..10]   
sieve[] = []   
sieve(x:xs) = x : sieve (map (`mod` x > 0) [xs])

我正在尝试实现类似于我们对列表所做的事情

sieve (a:x) = a:sieve [y| y<-x, y`mod`a > 0]
4

1 回答 1

5
xs `mod` x

你不能mod列出一个整数。

你可能是说

where p y = y `mod` x > 0

请注意,我还必须将参数更改为,y这样它就不会影响x上一行的模式。

另外,filter p [xs]应该是filter p xs

于 2012-10-31T14:17:38.613 回答