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 に答える