在lambda演算中,一般可以变量表达吗?

时间:2014-08-25 03:10:34

标签: variables lambda-calculus

为了更好地理解函数式编程,我正在阅读lambda calculus here的wiki页面。

定义说:

  

如果x是变量且M∈Λ,则(λx.M)∈Λ

直觉上我认为变量是/由单字母id表示。但是,由于我们在这里处理严格的数学定义,我只想再次证实这种理解:一般来说,表达式可以归类为变量吗?

e.g。如果x是变量,则表达式(x + x)是lambda演算中的变量吗?也就是可以写(λ(x + x).M)作为lambda演算抽象?

(关注在某些情况下这是真的。例如HereAn expression such as 4x^3 is a variable

1 个答案:

答案 0 :(得分:1)

不,(x + x)不是变量(实际上它甚至不是天真的lambda演算中的表达式)。 我认为你以某种方式混合了变量表达式这两个术语(或者想要某种模式匹配?)。

那么让我们按照lambda-calculus的核心定义和表达式

定义本身并不那么难(事实上,你自己将它与wiki页面联系起来)。 从一开始就提到它:

  • 你有一组变量 V :( v_1, v_2, ...)(当然你可以根据需要命名它们 - 重要的是你要记住它们被认为是不同 符号在您的微积分中)
  • 符号λ.()

这就是 - 这个语法 / calculus的所有“ Tokens ”。

现在有一些规则如何构建表达式

  • 每个变量都是一个表达式
  • 抽象:如果E是表达式且x是变量,则(λx.E)是表达式(此处x和{{1}是模板 Metavariables - 你必须用一些真正的表达式填充它们才能使它成为一个表达式!)
  • 应用:如果EA是表达式,则B是表达式。

所以可能的表达方式是:

  • (A B)
  • v_50
  • (λv_4.v_5)
  • ....

这就是表达方式。

你知道:如果你从一开始就没有允许 ((λv_4.v_5) v_50)作为变量的符号或名称,那么它永远不会是变量 - 事实上即使表达式也不是变量有一些表达式只包含一个所述变量 - 如果你调用某个表达式,它将永远不会是变量(再次);)

PS:当然有一些惯例可以使括号保持一点 down - 但是一开始你不需要那些。