Skip to content

Instantly share code, notes, and snippets.

@JustinSDK
Last active December 31, 2015 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JustinSDK/8035826 to your computer and use it in GitHub Desktop.
Save JustinSDK/8035826 to your computer and use it in GitHub Desktop.
Y Combinator Python 版

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)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment