代码之家  ›  专栏  ›  技术社区  ›  Platinum Azure

Lambda函数的理论基础

  •  3
  • Platinum Azure  · 技术社区  · 16 年前

    我特别希望得到关于常用符号的任何信息。

    编辑:哦,嘿,我忘了什么。

    6 回复  |  直到 16 年前
        1
  •  5
  •   Norman Ramsey    16 年前

    关于术语:

    • A. lambda表达式

      lambda表达式被McCarthy用作LISP (lambda (arguments ...) body) ,拼写为“lambda”。苏斯曼和斯蒂尔后来使语义学更加忠实于丘奇的原作。Haskell也采用了该表达式作为 \ arguments ... -> body ,而反斜杠的目的是 看 fn args => body . 所有这些表达式都正确地称为lambda表达式,并且都表示匿名函数。只有在Haskell中函数才是纯函数;Lisp、ML和Scheme都允许 body 有副作用。

    • A. 关闭 这就是当你 评价 lambda表达式或其他类型的嵌套函数。闭包不仅包含lambda表达式的编译代码,还包含有关自由变量的信息(在Lisp和Scheme中,闭包存储 自由变量的定义;在Haskell和ML中,闭包存储 价值观

    • 一 是一个更一般的概念,不需要局限于简单的绑定和主体。例如,在Smalltalk中,“块”表示匿名函数,但块体是语句序列,因此它肯定与lambda表达式不同。

    恐怕我不能帮你处理“委托功能”在我的世界里,这个词是用来描述完全不同的东西。

        2
  •  5
  •   Norman Ramsey    16 年前

    如果您想了解lambda和高阶函数在 程序设计 ,我认为你最好放弃你的不可知论。ML/Hope/Miranda/Haskell语系的一篇优秀论文是

    • Why Functional Programming Matters 约翰·休斯。Hughes将向您展示一些高阶函数的有趣用例,并且通常会很好地帮助您理解为什么人们首先对这些lambda东西感兴趣。
        3
  •  3
  •   John R. Strohm    16 年前

    你可能不想被提到阿隆佐·丘奇的朗姆达演算。

    阿贝尔森;Sussman的《计算机程序的结构和解释》可能是涵盖该主题以及应用程序的最容易理解的文本。

    如果你想知道它是从哪里开始的,去挖麦卡锡的 "Recursive Functions of Symbolic Expressions and Their Computation By Machine, Part I" .

        4
  •  1
  •   slebetman    16 年前

    学习Lisp方言(Scheme目前非常流行)。事实上,我完全同意约翰的建议,阅读“计算机程序的结构和解释”,并在此过程中学习Lisp。

    Lisp的大部分功能并不是真正“设计”到语言中的,与其他语言复制Lisp的方式不同。它们产生于Lisp所基于的几个简单规则——就像数学中的定理产生于数字所基于的规则一样。

        5
  •  1
  •   Wayne Conrad    12 年前

    如果不遇到相关的 SKI combinator calculus ,所以你最好把你的脚趾伸进去,把它做完。令人愉快而奇怪的 To Disect a Mockingbird 即使不是最好的起点,也可能是最奇怪的。你的大脑会感觉像是被外星人重新连接了。真正地

    Unlambda

    ```s``s``sii`ki
      `k.*``s``s`ks
     ``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
      `k``s`ksk
    

    嘿,别怪我。这不是我发明的。

    事情变得更加奇怪,当它显示出 Perl regular expression in a loop could implement the SKI calculus ,因此,循环中的Perl正则表达式是图灵完备的。

        6
  •  0
  •   R Samuel Klatchko    16 年前

    你看过报纸了吗 Wikipedia page on Lambda calculus 然而它在数学理论上更重,但一旦你击中目标,最终会涉及到更多的实际问题 first class functions .

    推荐文章