和之间有区别吗?


11

我目前正在学习Lambda演算,并且想知道以下两种不同的书写Lambda术语的方法。

  1. λXÿ。Xÿ
  2. λX。λÿ。Xÿ

意思或应用beta减少的方式是否存在任何差异,或者仅是表达同一件事的两种方式?

尤其是对创建的定义让我感到奇怪:

对 =λXÿ。λp。pXÿ

Answers:


15

这些只是符号的区别。是λx.λy.λz.t的缩写。这里没有魔术。λ X 。λ ÿ 。λ ž 。ŤλXÿž。ŤλX。λÿ。λž。Ť

确实,但您倾向于通过更改编写定义的方式来强调是函数。但这确实是一样的。对对=λXÿp。pXÿλ p 。p Ť ü对Ťüλp。pŤü


17

第一个是第二个的缩写。缩短表达式是一种常见的语法约定。

另一方面,如果您的语言中有元组,则两者之间是有区别的

  1. λX。λÿ。Xÿ和
  2. λ(X,ÿ)。Xÿ。

在前一种情况下,我可以为函数提供一个参数,然后将结果函数传递给其他函数。在后一种情况下,必须同时提供两个参数。当然,可以使用一个函数将1转换为2,反之亦然。此过程称为(un)currying。

您提到的的定义是将对的概念编码为 -calculus,而不是将对作为原始数据类型(如我上文所述)。λ对λ


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.