haskell - Foldr 递归模式中的 f [] = v 是什么意思?

标签 haskell recursion fold

当对函数乘积使用递归的 Foldr 模式时,我们得到:

product [] = 1
product (x:xs) = x * product xs

我的问题是,“product [] = 1”是什么意思?例如,对于 sum 函数,我们有 sum[] = 0?这是对答案的某种限制吗?

提前谢谢您。

最佳答案

product [] 是基本情况。通过对该函数的评估,很容易明白它存在的原因。

product [5, 4, 8]
5 * product [4, 8]
5 * 4 * product [8]
5 * 4 * 8 * product []
5 * 4 * 8 * 1
160

如果基本情况不存在,产品 [] 将无法评估任何内容。 1 是乘法的恒等式,就像 0 是加法的恒等式一样,即 1 乘以任何数字始终是该数字,就像 0 加任何数字都是该数字一样。

关于haskell - Foldr 递归模式中的 f [] = v 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49748268/

相关文章:

sorting - 代码形式的批判 Real World Haskell,第 3 章练习

Python 3 : Why are loops faster than recursions?

scala - Scala 中 scan 和 scanLeft 的区别

list - Haskell 在最后一次出现时拆分字符串

haskell - 无法安装 cabal-install

c++ - 如何循环 n 次,在 xml 文件中每个循环一个级别

Haskell 的 foldr/foldl 定义绊倒新手?对于 foldl 实际函数采用 f(默认情况)x 而对于 foldr 函数采用 f x(默认情况)?

sml - 带折叠的多种输入类型

html - 无法从某些网站读取 html

mysql - 对于 SQL 递归 CTE,为什么它每次 'loops' 时不再次引用 anchor 成员?为什么主播成员只得到一次 'called'?