在 The Y Combinator explained with JavaScript 用 JavaScript 程式碼來解釋何謂 Y Combinator,為了更瞭解 Y Combinator,我自己實作了一個,暫記過程如下 ...
def y(f):
r = lambda n: f(r)(n)
return f(r)
y(lambda fact: lambda n: 1 if n < 2 else n * fact(n - 1))(3) // 6
def y(f):
def get_r():
r = lambda n: get_r()(n)
return f(r)
return get_r()
def y(f):
def get_r():
return f(lambda n: get_r()(n))
return get_r()
def y(f):
def get_r(get_r):
return f(lambda n: get_r(get_r)(n))
return get_r(get_r)
def y(f):
get_r = lambda get_r: f(lambda n: get_r(get_r)(n))
return get_r(get_r)
def y(f):
return (lambda get_r: f(lambda n: get_r(get_r)(n)))(lambda get_r: f(lambda n: get_r(get_r)(n)))
def y(f):
return (lambda r: f(lambda n: r(r)(n)))(lambda r: f(lambda n: r(r)(n)))
# Y = λf.(λx.f (x x)) (λx.f (x x))
y = lambda f: (lambda x: f(lambda n: x(x)(n)))(lambda x: f(lambda n: x(x)(n)))