只用lambda演算實現FizzBuzz遊戲(Python版)

十八哥87發表於2015-02-11

最近看到《計算的本質:深入剖析程式和計算機》這本書的第6章,介紹了只用Ruby的lambda演算來實現著名的FizzBuzz問題:

寫一個程式輸出數字 1 到 100。但如果數字是 3 的倍數,就不輸出數字而是輸出“Fizz”,如果是 5 的倍數就輸出“Buzz”。對於那些 3 和5 的公倍數,就輸出“FizzBuzz”。

用Python解決FizzBuzz問題其實很簡單,我之前寫過,只需兩行就搞定:

for i in range(1,101):
    print('FizzBuzz' if i%15==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else i)

我嘗試只用lambda函式解決FizzBuzz問題,但是因為CPython直譯器在括號巢狀層數太多時會報錯,最大巢狀層數貌似為92層(我也不知道為什麼是92層,這是我試出來的)。所以我只能寫了個數字0到50內的FizzBuzz的解。整個程式同樣的壯觀,最重要的是它能在Python 3.4上正確的執行:

solution = ((lambda k: lambda f: ((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda l: lambda x: lambda g: (lambda b: b)((lambda p: p(lambda x: lambda y: x))(l))(x)(lambda y: g(f((lambda l: (lambda p: p(lambda x: lambda y: y))((lambda p: p(lambda x: lambda y: y))(l)))(l))(x)(g))((lambda l: (lambda p: p(lambda x: lambda y: x))((lambda p: p(lambda x: lambda y: y))(l)))(l))(y))))(k)(((lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x))))(lambda l: lambda x: (lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(l)(f(x))))(((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda m: lambda n: (lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(m)(n))( lambda x: (lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(f((lambda n: lambda p: lambda x: p(n(p)(x)))(m))(n))(m)(x))( (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x)) )))((lambda p: lambda x: p(x)))((lambda p: lambda x: p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(x)))))))))))))))))))))))))))))))))))))))))))))))))))))(lambda n: (lambda b: b)((lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda m: lambda n: (lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(n)(m))(lambda x: f((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n))(n)(x))(m))(n)((lambda p: lambda x: p(p(p(p(p(p(p(p(p(p(p(p(p(p(p(x)))))))))))))))))))(((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(((lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x)))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x)))))))))))))((lambda b: b)((lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda m: lambda n: (lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(n)(m))(lambda x: f((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n))(n)(x))(m))(n)((lambda p: lambda x: p(p(p(x)))))))(((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(((lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x)))))))))))))((lambda b: b)((lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda m: lambda n: (lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(n)(m))(lambda x: f((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n))(n)(x))(m))(n)((lambda p: lambda x: p(p(p(p(p(x)))))))))(((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(((lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda n: lambda p: lambda x: p(n(p)(x)))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))))))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x)))))))))))(((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda n: (lambda l: lambda x: ((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda l: lambda x: lambda g: (lambda b: b)((lambda p: p(lambda x: lambda y: x))(l))(x)(lambda y: g(f((lambda l: (lambda p: p(lambda x: lambda y: y))((lambda p: p(lambda x: lambda y: y))(l)))(l))(x)(g))((lambda l: (lambda p: p(lambda x: lambda y: x))((lambda p: p(lambda x: lambda y: y))(l)))(l))(y))))(l)((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))(((lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x))))(x))((lambda l: lambda x: (lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: y))((lambda x: lambda y: lambda f: f(x)(y))(x)(l)))))((lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(n)((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x)))))(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x)))))))))))(((lambda x: lambda y: lambda f: f(x)(y))((lambda x: lambda y: x))((lambda x: lambda y: x))))(lambda x: f(((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda m: lambda n: (lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(n)(m))(lambda x: (lambda n: lambda p: lambda x: p(n(p)(x)))(f((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n))(n))(x))((lambda p: lambda x: x))))(n)(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))(x)))((lambda f: (lambda x: f(lambda y: x(x)(y)))(lambda x: f(lambda y: x(x)(y))))(lambda f: lambda m: lambda n: (lambda b: b)((lambda m: lambda n: (lambda n: n(lambda x: (lambda x: lambda y: y))(lambda x: lambda y: x))((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n)))(n)(m))(lambda x: f((lambda m: lambda n: n((lambda n :(lambda p: p(lambda x: lambda y: x))(n(lambda p: (lambda x: lambda y: lambda f: f(x)(y))((lambda p: p(lambda x: lambda y: y))(p))((lambda n: lambda p: lambda x: p(n(p)(x)))((lambda p: p(lambda x: lambda y: y))(p))))((lambda x: lambda y: lambda f: f(x)(y))((lambda p: lambda x: x))((lambda p: lambda x: x))))))(m))(m)(n))(n)(x))(m))(n)(((lambda m: lambda n: n((lambda m: lambda n: n((lambda n: lambda p: lambda x: p(n(p)(x))))(m))(m))((lambda p: lambda x: x)))((lambda p: lambda x: p(p(x))))((lambda p: lambda x: p(p(p(p(p(x))))))))))))(n))))))

def to_integer(proc):
    return proc(lambda n: n + 1)(0)


def to_boolean(proc):
    return (lambda b: b)(proc)(True)(False)


def to_array(proc):
    array = []
    while True:
        array.append((lambda l: (lambda p: p(lambda x: lambda y: x))((lambda p: p(lambda x: lambda y: y))(l)))(proc))
        proc = (lambda l: (lambda p: p(lambda x: lambda y: y))((lambda p: p(lambda x: lambda y: y))(l)))(proc)
        if to_boolean((lambda p: p(lambda x: lambda y: x))(proc)):
            break
    return array


def to_char(c):
    return '0123456789BFiuz'[to_integer(c)]


def to_string(s):
    return ''.join([to_char(c) for c in to_array(s)])

## 測試
import unittest

class TestLambda(unittest.TestCase):     
    def test_FizzBuzz(self):
        for p in to_array(solution):
            print(to_string(p))

if __name__ == '__main__':
    unittest.main()

執行結果如下:

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz

原始碼在這裡:
https://github.com/cforth/toys/blob/master/LambdaCalculus/

相關文章