函数绑定中的类型错误

Vbp*_*Vbp 1 recursion primes haskell function

我试图通过递归实现素数,我知道如何用列表来做.

在函数绑定中键入错误

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

我也尝试过使用map并在应用程序中遇到类型错误

primes :: [Int]   
primes = sieve [2..10]   
sieve[] = []   
sieve(x:xs) = x : sieve (map (`mod` x > 0) [xs])
Run Code Online (Sandbox Code Playgroud)

我正在努力实现与list相似的功能

sieve (a:x) = a:sieve [y| y<-x, y`mod`a > 0]
Run Code Online (Sandbox Code Playgroud)

ham*_*mar 5

xs `mod` x
Run Code Online (Sandbox Code Playgroud)

您不能mod使用整数列表.

你可能意味着

where p y = y `mod` x > 0
Run Code Online (Sandbox Code Playgroud)

注意我还必须更改参数,y以便它不会影响x前一行的模式.

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