我知道这可能很简单,但我在弄清楚如何减少这个问题时遇到了问题。以下是我的等式。
(λx λy . y x) z
我只是想知道从哪里开始,因为我完全迷失了。
答案 0 :(得分:3)
lambda表达式在语法上不正确,我想你打算写:
(λx.λy.y x) z
或
(λxy.y x) z
这很重要,因为有效的lambda -exssion是λx.M而不是λxM,或者使用语法糖你可以写出λxy.M而不是λxλy.M而这个(λx.λy.yx)令人困惑因为它看起来像是一个应用程序。
我会减少(λx.λy.y x) z
和(λx.λy.yx) z
1)(λx.λy.y x) z
2)通过将x应用于(λx.λy.y x)
来减少λx.λy.y
,因此(λx.λy.y x) z
缩减为λy.y z
3)通过将z应用于λy.y z
来减少λy.y z
,结果将为z。
如果你的意思是(λx.λy.yx)
z
1)(λx.λy.yx) z
2)λx.(λy.yx) z
3)将z应用于第一次抽象:λy.yz
4)没有其他任何可以减少结果的是:λy.yz
我建议你看看lambda-calculus定义并理解应用程序,抽象和变量之间的区别。
同样在早期阶段最好使用()并总是以扩展方式编写lambda表达式,这样你就可以减少错误。
答案 1 :(得分:0)
你的lambda表达式可以有两个输入参数,但是只给出一个输入z。因此,这导致部分应用。
在您的情况下,这意味着参数x的值为z。因此,该表达式中所有出现的x都被替换为z。但是,参数y没有给出任何值,因为没有任何输入,所以参数y保持约束。
正如fsvieira所说,λy.yz是正确的答案。