为什么不能像定义中那样实现定点组合器?
我正在尝试像 Curry 定义的那样实现 Y 组合器。
此代码不起作用。它会导致无限递归。
F = (lambda f: (lambda x: (1 if x == 0 else (x * (f(x-1))))))
Y = (
lambda f:
(lambda x: f(x(x)))
(lambda x: f(x(x)))
)
Y(F)(3)
但是,这个确实有效:
Y = (
lambda f:
(lambda x: f(
lambda v: x(x)(v)
))
(lambda x: f(
lambda v: x(x)(v)
))
)
Y(F)(3)
为什么第一个不起作用,而第二个起作用?