2017-10-17 79 views
0

我是Haskell的初學者,我試圖實現一個函數,該函數返回列表中的內容相乘。這裏是我的代碼:Haskell中列表的乘法內容

product' :: Num a => [a] -> a 
product' [] = 1 
product' (_:xs) = foldl (*) 1 xs 

在命令行中,我在產品類型:

product' [2,3,4] 

,我得到的12,而不是24,我知道它與列表的第一個元素做沒有被閱讀,但我無法弄清楚。任何幫助或指導將不勝感激。

+2

爲什麼你用_省略第一個元素? – qxg

+0

@qxg我不知道他們是_和使用變量x之間的區別。 – legoniko

+0

_表示未使用的變量。 – qxg

回答

2

只要寫

product' :: Num a => [a] -> a 
product' = foldl (*) 1 

product' :: Num a => [a] -> a 
product' [] = 1 
product' (x:xs) = foldl (*) x xs 
如果你想保留參數

+1

第二個方程不太正確。一個空集合的產品是'1',就像它的總和爲'0'一樣,因爲它們是身份。你不處理這種情況。 – HTNW

+0

感謝您的糾正。 – qxg

+0

我實際上只是想着把第一個方程式指向'product'xs = foldl(*)1 xs',但這也起作用。 – HTNW