[英]How can I fix this positive list haskell code?
写一个 function 将列表中的所有正元素相乘,我试着做到了。 但我需要帮助,因为它不起作用? 谁能帮我解决问题,我该如何解决?
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)
上对非空列表进行模式匹配, x
是第一个项目, xs
是其余项目; 在[]
上为空列表。
所以 function 应该是这样的:
positive :: (Num a, Ord a) => [a] -> a
positive [] = … -- (1)
positive (x:xs)
| x> 0 = … -- (2)
| otherwise = … -- (3)
在需要填写的地方…
部分。 第一部分 (1) 应该在列表为空的情况下返回结果。 第二个 (2) 有一个正数x
,应该在列表xs
的 rest 上递归并将两者相乘。 最后,第三种情况应该在列表xs
的 rest 上递归,因为x
小于或等于零。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.