2014-12-03 3 views
0

Я хочу написать функцию wp (без простых чисел), которая удаляет все простые числа из списка цифр. Таким образом, wp [1, 2, 3, 4, 5, 6, 7] = [1, 4, 6].Haskell - исключить простые числа из списка

Я попытался кодирования это следующим образом:

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 

Но при компиляции, я получаю «Ошибка синтаксического анализа на входе =» ошибка, но я не могу найти ошибку синтаксиса. Есть идеи?

ответ

1

Ваша проблема заключается в использовании 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