Lambda演算beta减少变量

时间:2018-06-23 09:04:40

标签: lambda lambda-calculus

我有以下表达式:


$ compgen -A function -abck | grep '.*grep.*'
egrep
fgrep
grep
egrep
fgrep
grep
lzfgrep
fgrep
lzgrep
zstdgrep
zfgrep
bzgrep
plugreport
pcregrep
lzegrep
msggrep
grep
pgrep
zegrep
zgrep
egrep
xzegrep
zipgrep
xzgrep
xzfgrep
pcre2grep
orc-bugreport
ptargrep
ptargrep

除了我有以下公式:

Formula

我(认为)我知道如何正确减少它:

(((\x y -> x y (\z -> z + 1)) 5)

但是我不明白如何填写公式中规定的变量。我不知道该在何处放置什么以及为什么。除此示例外,我还有另一个表达式如下:

((\y -> y)(\z -> z + 1) 5) 

((\y -> y)6)

(6)

具有以下公式:

Formula 2

再次,我想我会减少它:

(\x y x -> ( (y z) x) )5

但是后来我又一次不知道如何填写变量。

有人可以帮我填写这些变量吗?除了解释我为什么该变量应该具有它的值

1 个答案:

答案 0 :(得分:0)

第一个公式表示:如果您有一个应用程序(t u),则首先将t还原为值t',该值应该是一个函数。然后,将u减小为值u',该值将成为函数的参数,然后进行函数调用。在您的第一个代码段中,括号不平衡。假设您打算写的是:
((\x y -> x y) (\z -> z + 1) 5)
第一步是使用两个参数调用函数(\x y -> x y),并获取
((\z -> z + 1) 5)
然后将5传递给加1的函数,因此结果为6。

第二个公式是说,当您要执行函数调用时,可以在函数体中用参数代替函数的形式参数。因此,您将x中的u更改为t。在此步骤中,您需要稍微小心些,以免捕获变量。看看capture-avoiding substitution

相关问题