如何修复此肯定列表 haskell 代码?
How can I fix this positive list haskell code?
编写一个函数,将列表中的所有正元素相乘!
我试图做到,但我需要帮助,因为它不起作用。有人可以帮我解决问题吗?
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
您不能使用 x > 0
,因为 x
是一个列表。您可以在 (x:xs)
上对 non-empty 列表进行模式匹配,第一项为 x
,其余项为 xs
;在 []
上为空列表。
所以函数应该如下所示:
positive :: (Num a, Ord a) => [a] -> a
positive [] = … -- (1)
positive (x:xs)
| x> 0 = … -- (2)
| otherwise = … -- (3)
需要填写…
部分的地方。第一部分 (1) 应该 return 在列表为空的情况下的结果。第二个 (2) 有一个正数 x
,应该递归列表的其余部分 xs
并将两者相乘。最后,第三种情况应该递归列表的其余部分 xs
,因为 x
小于或等于零。
编写一个函数,将列表中的所有正元素相乘! 我试图做到,但我需要帮助,因为它不起作用。有人可以帮我解决问题吗?
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
您不能使用 x > 0
,因为 x
是一个列表。您可以在 (x:xs)
上对 non-empty 列表进行模式匹配,第一项为 x
,其余项为 xs
;在 []
上为空列表。
所以函数应该如下所示:
positive :: (Num a, Ord a) => [a] -> a
positive [] = … -- (1)
positive (x:xs)
| x> 0 = … -- (2)
| otherwise = … -- (3)
需要填写…
部分的地方。第一部分 (1) 应该 return 在列表为空的情况下的结果。第二个 (2) 有一个正数 x
,应该递归列表的其余部分 xs
并将两者相乘。最后,第三种情况应该递归列表的其余部分 xs
,因为 x
小于或等于零。