在急切求值中编码 if 分支和递归

Encode if-branch and recursion in eager evaluation

据我所知,在热切求值中,我们不能像正常顺序求值那样对 if 分支和递归进行编码。

例如,在 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))

我们可以在 eager evaluation 中对 if 分支和递归进行编码吗? 如果可以的话,我想知道我们应该如何使用 lambda 演算对 if-branch 和阶乘进行编码。

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

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

所以可以做到,但前提是 'if' 像这样使用:if e1 (λ_.e2) (λ_.e3)