我有以下表达式:
$ 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
除了我有以下公式:
我(认为)我知道如何正确减少它:
(((\x y -> x y (\z -> z + 1)) 5)
但是我不明白如何填写公式中规定的变量。我不知道该在何处放置什么以及为什么。除此示例外,我还有另一个表达式如下:
((\y -> y)(\z -> z + 1) 5)
((\y -> y)6)
(6)
具有以下公式:
再次,我想我会减少它:
(\x y x -> ( (y z) x) )5
但是后来我又一次不知道如何填写变量。
有人可以帮我填写这些变量吗?除了解释我为什么该变量应该具有它的值
答案 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。