gpt4 book ai didi

haskell - 使用 foldr 定义长度

转载 作者:行者123 更新时间:2023-12-04 08:57:42 26 4
gpt4 key购买 nike

我试图理解我正在类的讲义中的一部分。它将长度函数定义为:

length = foldr (\_ n -> 1 + n) 0

有人可以解释一下这是如何工作的吗?我无法绕开它。

最佳答案

一、类型foldr : (a -> b -> b) -> b -> [a] -> b
结合上下文使用,foldr接受 3 个参数:一个函数(接受 a. 列表的一个元素和 b. 一个累加器,并返回累加器)、累加器的起始值和一个列表。 foldr通过列表应用函数后返回累加器的最终结果。

至于这段代码:

length = foldr (\_ n -> 1 + n) 0

如您所见,它缺少列表 - 因此右侧的返回值是一个函数,它将接收一个列表并生成一个 Int (与 0 相同的类型)。类型: [a] -> Int .

至于右边是什么意思: (\_ n -> 1 + n) 0 \表示声明一个未命名的函数
_表示忽略列表中的元素(对应于 a 类型的 foldr )。如您所知, foldr将遍历列表并将函数应用于每个元素。这是传递给函数的元素。我们没有在 length 中使用它。函数,所以我们表示它应该被忽略。
n是作为累加器传入的 Int 的参数。
->意味着返回
1 + n将增加累加器。可以想象返回值传回 foldrfoldr保存值以传递给函数 (\_ n -> 1 + n) 的下一次调用.
0括号外是计数器的起始值。

关于haskell - 使用 foldr 定义长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11425334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com