我知道之前已经问过这个问题。我在各个岗位上工作,但似乎无法找到问题的解决方案。我有一个简单的Haskell程序,它创建了一个值列表。然后,我想要打电话给Prelude的产品功能,或者我自己的产品功能。或者,方式,每次我在列表生成函数上调用这些函数时,我得到零结果。当我对列表中的值求和时,会正确添加,这使我认为乘法函数可能在实例化之前使用列表。代码看起来像这样:
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
答案 0 :(得分:2)
我不知道listCreator
做了什么或num
是什么,但看来listCreator num
是一个包含0的列表。
正如chi在评论中提到的,另一种可能性是整数溢出。您可以通过切换到Integer
类型来解决此问题。