簡體   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