首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解伯德和休斯

如何理解伯德和休斯
EN

Stack Overflow用户
提问于 2014-05-17 04:37:43
回答 1查看 46关注 0票数 0

想要理解查尔斯·伯德对函数式编程的介绍,以及约翰·休斯的“为什么函数式编程很重要”,就迷失了方向。特别是他们对foldr的讨论。

代码语言:javascript
复制
length = foldr count 0
count a n = n + 1

当它应用于一个列表时,例如,1,2,3,它应该返回3。这是鸟(第66页):

代码语言:javascript
复制
(#) = foldr oneplus 0
       where oneplus x n = 1 + n

这里还有另一种治疗蓝宝石的方法:

代码语言:javascript
复制
length = foldr (λx.λn.(1 + n)) 0

当我们开始尝试把它应用到像1,2,3这样的列表时,我就不明白这个文件夹是怎么回事了。我只是不明白变量x和n所指的是什么。像sum这样的简单的:

代码语言:javascript
复制
sum = foldr (+) 0

对于1,2,3是

代码语言:javascript
复制
(+) 1 ((+) 2 ((+) 3 0)) = 6

使用Hughes的表示法,用函数/运算符替换列表中隐含的缺点,以及列表中隐含的零的标识,然后(前缀)添加--我理解。但在处理这些神秘变量的时候。也许有人能帮我看一下列表和变量是如何相互作用的。

EN

回答 1

Stack Overflow用户

发布于 2014-05-17 10:30:48

传递给foldr的函数的参数是正在折叠的列表和累加器(本质上是正在计算的东西)的一个元素。

这些参数的更明确的名称可能会有所帮助:

代码语言:javascript
复制
length = foldr count 0
count ignored_elt length_so_far = length_so_far + 1

理解折叠的另一种方法是将它们编写为递归函数,并编写折叠,并检查这两个定义的相似之处。在这些之后,您应该开始了解折叠捕获的模式。(提示:在这样做时,尽量避免像+这样的交换操作,因为它们会模糊左折叠和右折叠之间的区别)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23707623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档