据我所知,在急切的评估中,我们不能像在正常顺序评估中那样对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 = ???
答案 0 :(得分:0)
将它们包装在一个忽略其参数的lambda中,然后如果可以通过强制它来选择分支,传入一些虚拟值。
所以可以这样做,但只有在'if'使用时才会这样:if e1 (λ_.e2) (λ_.e3)