繁体   English   中英

我该如何修复这个肯定列表 haskell 代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM