首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambda函数的理论基础

Lambda函数的理论基础
EN

Stack Overflow用户
提问于 2010-01-01 09:35:00
回答 6查看 391关注 0票数 3

我只是想知道在哪里可以找到一些与语言无关的教程,了解lambda函数是什么,它们的用法是什么,以及不支持它们的语言中的大致等价物。

我特别喜欢任何关于通用符号的信息。

谢谢!如果我能详细说明这一点,请让我知道。

编辑:哦,嘿,我忘了一件事。

就术语而言,lambda表达式或函数、匿名/委托函数和闭包之间有什么区别?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-01 12:10:51

仅就术语而言,lambda表达式或函数、匿名/委托函数和闭包之间有什么区别?

关于术语:

  • λ表达式是阿隆佐·丘奇为λ演算发明的匿名函数的原始编写方式。在lambda演算中,所有函数都是纯函数:没有任何副作用。

McCarthy将lambda表达式作为(lambda (arguments ...) body)用于LISP,拼写为"lambda“。萨斯曼和斯蒂尔后来使语义更忠实于丘奇的原始。这个表达式也被Haskell采用为\ arguments ... -> body,反斜杠看起来像一个lambda,但Haskell委员会使用右箭头而不是点,因为他们想要点作为函数组合。这个表达式被Robin Milner用来表示ML,但拼写更加奇怪:fn args => body。所有这些表达式都被恰当地称为lambda表达式,并且都表示匿名函数。只有在Haskell中,函数才是纯的;Lisp、ML和Scheme都允许body产生副作用。闭包是当你计算一个

  • 表达式或其他类型的嵌套函数时得到的闭包。闭包不仅包含lambda表达式的编译代码,还包含有关自由变量的信息。(在Lisp和Scheme中,闭包存储自由变量的位置;在Haskell和ML中,闭包存储自由variables.)

  • An匿名函数的值,这是一个更一般的概念,不需要局限于简单的绑定和主体。例如,在Smalltalk中,“块”代表一个匿名函数,但块的主体是一系列语句,因此它绝对不同于λ表达式。

恐怕我不能帮助您实现“委托函数”;在我的世界里,这个术语是用来描述完全不同的东西的。

票数 5
EN

Stack Overflow用户

发布于 2010-01-01 12:03:36

要求语言不可知的治疗是一个非常严格的限制。我可以推荐几个关于lambda演算的教程:

  • A tutorial by R. Rojas专注于快速地使用λ演算进行编程。
  • A tutorial by Prakash Panangden深入到了更多的技术深度,最后展示了如何使用定点组合器模拟递归。

如果你想了解lambda和高阶函数在编程中的用法,我认为你最好放弃不可知论。关于ML/Hope/Miranda/Haskell语言家族的一篇好文章是

约翰·休斯的

  • Why Functional Programming Matters。Hughes将向您展示一些有趣的高阶函数用例,通常会很好地帮助您理解为什么人们会对所有这些lambda函数感兴趣。
票数 5
EN

Stack Overflow用户

发布于 2010-01-01 09:45:55

你可能不想被提到阿隆佐·丘奇的lambda微积分。

到目前为止,lambda函数最常用的符号是LISP。

Abelson & Sussman的“计算机程序的结构和解释”可能是涵盖该主题以及应用程序的最容易理解的文本。

如果你想看看它是从哪里开始的,那就去看看麦卡锡的"Recursive Functions of Symbolic Expressions and Their Computation By Machine, Part I"吧。

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

https://stackoverflow.com/questions/1987672

复制
相关文章

相似问题

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