Haskell-从列表中删除素数

Haskell-从列表中删除素数,haskell,syntax,Haskell,Syntax,我想写一个函数wp(不带素数),它从列表中删除所有素数 数字的数量。因此,wp[1,2,3,4,5,6,7]=[1,4,6] 我试着这样编码: wp :: [Int] -> [Int] prime :: Int -> Bool prime n = if f n > 0 then False else True where f n = foldl (\acc x -> if n `mod` x == 0 then acc = acc + 1 else acc = a

我想写一个函数wp(不带素数),它从列表中删除所有素数 数字的数量。因此,wp[1,2,3,4,5,6,7]=[1,4,6]

我试着这样编码:

wp :: [Int] -> [Int]
prime :: Int -> Bool

prime n = if f n > 0 then False else True
   where f n = foldl (\acc x -> if n `mod` x == 0 then acc = acc + 1 else acc = acc + 0) 0 [2..n-1]
wp xs = filter (not.prime) xs

但在编译时,我得到了“parseerroroninput=”error,但我找不到语法错误。有什么想法吗?

你的问题在于如何使用
acc=acc+x
。你只需要把它写成
acc+1
或者
acc+0
(或者只是
acc
真的)。另外,我建议在函数定义的顶部写函数签名,而不是在顶部写一个C风格的列表

最后,我应该注意,
wp
不会在结果中包含1,因此您必须手动包含它

prime :: Int -> Bool
prime n = if f n > 0 then False else True
     where f n = foldl (\acc x -> if n `mod` x == 0 then acc + 1 else acc) 0 [2..n-1]

wp :: [Int] -> [Int]
wp xs = 1 : filter (not.prime) xs