Diana
Diana

Reputation: 1437

Haskell - eliminate prime numbers from a list

I want to write a function wp (without primes) which removes all the primes from a list of numbers. Thus, wp [1, 2, 3, 4, 5, 6, 7] = [1, 4, 6].

I tried coding it like this:

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

But when compiling it, I get the "parse error on input =" error but I can't find my syntax error. Any ideas?

Upvotes: 0

Views: 201

Answers (1)

shree.pat18
shree.pat18

Reputation: 21757

Your problem is in the use of acc = acc + x. You just need to write it as acc + 1 or acc + 0 (or just acc really) instead. Also, I would recommend writing the function signature on top of the function definition, rather than a C-style list at the top.

Finally, I should note that wp will not include 1 in the result, so you will have to manually include it.

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

Upvotes: 1

Related Questions