Home > OS >  How can I fix this positive list haskell code?
How can I fix this positive list haskell code?

Time:03-15

Write a function that multiplies all the positive elements in a list! I tried to make it, but I need help because it is not working. Can anybody help me what is the problem and how can I fix it?

positive :: (Num a, Ord a) => [a] -> a
positive x
  | x> 0 = x * y
  | otherwise = Nothing

Example:
positive [1..10] == 3628800
positive ([1..10]    [-2, -5, -6]) == 3628800
positive [3, 5, 66, -8, -4, 5, 6, 93, -4567, 56] == 154677600 

CodePudding user response:

You can not use x > 0, since x is a list. You can pattern match on (x:xs) for a non-empty list with x the first item, and xs the remaining items; and on [] for the empty list.

So the function should look like:

positive :: (Num a, Ord a) => [a] -> a
positive [] = …    -- (1)
positive (x:xs)
  | x> 0 = …       -- (2)
  | otherwise = …  -- (3)

Where you need to fill in the parts. The first part (1) should return a result in case of an empty list. The second (2) has a positive number x, and should recurse on the rest of the list xs and multiply the two together. Finally, the third case should recurse on the rest of the list xs, since x is less than or equal to zero.

  • Related