>>> test = lambda f: f(lambda x: x + 1)(0)
>>> z = lambda f: lambda x: x
>>> test(z)
0
>>> succ = lambda n: lambda f: lambda x: f(n(f)(x))
>>> _1 = succ(z)
>>> test(_1)
1
>>> _2 = succ(_1)
>>> test(_2)
2
>>> plus = lambda m: lambda n: lambda f: lambda x: m(f)(n(f)(x))
>>> _3 = plus(_1)(_2)
>>> test(_3)
3
>>> mult = lambda m: lambda n: lambda f: lambda x: m(n(f))(x)
>>> _6 = mult(_2)(_3)
>>> test(_6)
6
>>> _5 = plus(_2)(_3)
>>> _25 = mult(_5)(_5)
>>> _4 = plus(_2)(_2)
>>> _100 = mult(_25)(_4)
>>> test(_100)
100
答案 0 :(得分:0)
首先避免使用相同名称的隐藏(本地)变量以避免额外的混淆(就好像你需要了!)
>>> test = lambda f: f(lambda x: x + 1)(0)
>>> z = lambda g: lambda y: y
>>> test(z)
0
逐步用变量值替换变量:
test(z) = z(lambda x: x + 1)(0)
现在z
是一个返回身份函数lambda y: y
的函数,无论传递什么参数(g
没有出现在定义lambda
的表达式中)。
test(z) = (lambda y: y)(0) = 0