Haskell - 列出产品

时间:2015-10-15 21:03:20

标签: haskell

我知道之前已经问过这个问题。我在各个岗位上工作,但似乎无法找到问题的解决方案。我有一个简单的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

1 个答案:

答案 0 :(得分:2)

我不知道listCreator做了什么或num是什么,但看来listCreator num是一个包含0的列表。

正如chi在评论中提到的,另一种可能性是整数溢出。您可以通过切换到Integer类型来解决此问题。