在急切评估中编码if-branch和递归

时间:2017-12-01 17:46:40

标签: if-statement factorial evaluation lambda-calculus

据我所知,在急切的评估中,我们不能像在正常顺序评估中那样对if-branch和递归进行编码。

例如,在lambda演算中,if-branch和factorial(fac)可以编码

if e1 e2 e3 = e1 e2 e3
fac = Y(λf.λn. if n=0 1 n*f(n-1))
Y = λf.(λx. f(xx))(λx. f(xx))

我们可以在急切的评估中编码if分支和递归吗? 如果我们能够知道如何使用lambda演算在急切评估中编码if-branch和factorial。

if e1 e2 e3 = ???
fac = ???

1 个答案:

答案 0 :(得分:0)

将它们包装在一个忽略其参数的lambda中,然后如果可以通过强制它来选择分支,传入一些虚拟值。

所以可以这样做,但只有在'if'使用时才会这样:if e1 (λ_.e2) (λ_.e3)