Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 将列表中的所有数字相乘-Haskell_List_Haskell - Fatal编程技术网

List 将列表中的所有数字相乘-Haskell

List 将列表中的所有数字相乘-Haskell,list,haskell,List,Haskell,我是haskell的新手,我想将数组中的所有数字相乘。例如: 数组: [3,2,4] //3*2*4 输出 24 谢谢,非常感谢您的帮助 您可以使用折叠功能执行此操作: foldr (*) 1 [2,3,4] 或者 在Haskell中有很多方法可以做到这一点。 例如,您可以使用: product [3,2,4] 或同等地 foldr (*) 1 [3,2,4] 或递归地: prod [] = 1 prod (x : xs) = x * prod xs 函数foldr就是所谓的

我是haskell的新手,我想将数组中的所有数字相乘。例如:

数组:

[3,2,4]   //3*2*4
输出

24 

谢谢,非常感谢您的帮助

您可以使用折叠功能执行此操作:

foldr (*) 1 [2,3,4]
或者


在Haskell中有很多方法可以做到这一点。 例如,您可以使用:

product [3,2,4]
或同等地

foldr (*) 1 [3,2,4]
或递归地:

prod [] = 1
prod (x : xs) = x * prod xs 
函数
foldr
就是所谓的列表。要理解foldr,我们首先需要理解列表构造函数。在Haskell中,
[3,2,4]
3:2:4:[]
的语法糖,其中
是列表构造函数,
[]
是空列表。应用程序
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

作为例子,考虑<代码> FordR(*)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

产品
功能正是您想要的。
它还有一个特性,
product[]
等于1,这在数学上是可以预期的


如果你看一下它的定义,你会发现,
product
确实是乘法的倍数(以1作为中性元素)。

谢谢你的回答,你能解释一下foldr函数的作用吗?我编辑了答案来解释foldr函数。希望它能帮助你。
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