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