Haskell-从列表中删除素数
我想写一个函数wp(不带素数),它从列表中删除所有素数 数字的数量。因此,wp[1,2,3,4,5,6,7]=[1,4,6] 我试着这样编码: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 :: [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