我知道这个话题已经多次讨论过了,但我还有一些不清楚的地方。 我已经阅读了这个问题applicative-order/call-by-value and normal-order/call-by-name differences,我想一劳永逸地澄清一下:
通话按姓名
按照正常顺序,但在抽象内部不执行缩减。例如,根据这种策略,λx。(λx.x)x是正常形式,尽管它包含redex(λx.x)x。
在按名称调用时,表达式λx。(λx.x)x称为正常形式;这是因为“(λx.x)x”被认为是身体(因为λ的范围尽可能向右延伸)?在另一方面,如果我应用正常的订单,结果会是什么?
答案 0 :(得分:1)
在按名称调用时,表达式λx。(λx.x)x称为正常形式;这是因为“(λx.x)x”被认为是身体(因为λ的范围尽可能向右延伸)?
是的,你是对的。
另一方面,如果我应用正常的顺序,结果会是什么?
你在身体里面做了缩减:(λx.x)x -> x
,所以整个事情都减少到了身份功能:
λx.(λx.x)x -> λx.x
为了进一步说明这一点,让我再一次这样做,renaming变量符合Barendregt variable convention:λx.(λx.x)x =α λx.(λy.y)x
:
λx.(λy.y)x -> λx.[y := x](y) = λx.x