-1
我知道這個問題之前已被問過。我通過各種職位工作,但似乎無法找到解決問題的辦法。我有一個簡單的Haskell程序來創建一個值列表。然後我要麼打電話給Prelude的產品功能,要麼叫我自己的。無論如何,每次我在列表生成函數中調用這些函數時,我都會得到一個零結果。當我對列表中的值進行求和時,會正確添加值,這使我認爲乘法函數在實例化之前可能會使用該列表。該代碼lookes是這樣的:Haskell - 列表中的產品
module Main where
...
sumVals::[Int]->Int
sumVals = foldr (+) 0
multVals::[Int]->Int
--multVals list = foldl (*) 1 list
multVals [] = 1
multVals (x:xs) = x * multVals xs
...
main :: IO()
main = do
...
print $ sumVals (listCreator num) -- prints correct sum value
print $ sum (listCreator num) -- prints correct sum value
print $ multVals (listCreator num) -- prints: 0
print $ product (listCreator num) -- prints: 0
print $ foldl (*) 1 (listCreator num) -- prints: 0
print $ product [1,1,3,1] -- prints: 3
let list = fib num
print $ multVals list -- prints: 0
print $ product list -- prints: 0
'listCreator'做什麼?如果它的創作有任何0,這將解釋的事情。 – dfeuer
使用'Int'時,乘以2(或倍數)將最終得到0.嘗試用'Integer'代替。 – chi
@chi,我甚至沒有注意到這些是「Int」。很好的接收。 – dfeuer