我是haskell的新手,想要将数组中的所有数字相乘。例如。:
阵列:
[3,2,4] //3*2*4
输出
24
谢谢,非常感谢任何帮助。
答案 0 :(得分:7)
在Haskell中有很多方法可以做到这一点。 例如,您可以使用:
product [3,2,4]
或等效
foldr (*) 1 [3,2,4]
或递归:
prod [] = 1
prod (x : xs) = x * prod xs
函数foldr
是所谓的列表catamorphism。要理解foldr,我们需要首先理解列表构造函数。在Haskell中,[3,2,4]
是3 : 2 : 4 : []
的语法糖,其中:
是list-cons构造函数,[]
是空列表。应用foldr f v
替换按功能:
列出的f
中的每一个v
和foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f v [] = v -- equation 1
foldr f v (x:xs) = f x (foldr f v xs) -- equation 2
的空列表。其定义如下:
foldr (*) 1 [3,2,4]
例如,请考虑foldr (*) 1 [3,2,4] =
3 * (foldr (*) 1 [2,4]) = (by equation 2 of foldr)
3 * (2 * (foldr (*) 1 [4])) = (by equation 2 of foldr)
3 * (2 * (4 * (foldr (*) 1 []))) = (by equation 2 of foldr)
3 * (2 * (4 * 1)) = (by equation 1 of foldr)
= 24
:
objOne={ example1:"example1 data" example2:"example2 data"};
objtwo={ example3:"example3 data" example4:"example4 data"};
答案 1 :(得分:1)
您可以使用折叠功能:
foldr (*) 1 [2,3,4]
...或
foldr1 (*) [2,3,4]
答案 2 :(得分:1)
product
功能正是您所需要的。
它还具有product []
等于1的特征,正如您在数学上所期望的那样。
如果你看一下它的定义,你可以看到product
确实是乘法的 fold (1为中性元素)。