leozp / Blogs

MyBlog
0 stars 0 forks source link

函数式编程——实现数字加法 #2

Open leozp opened 4 years ago

leozp commented 4 years ago

数字定义

def _0(s,z):
    return z

def _1(s,z):
    return s(z)

def _2(s,z):
    return s(s(z))

def _3(s,z):
    return s(s(s(z)))

_4 = lambda s,z:s(s(s(s(z))))
_5 = lambda s,z:s(s(s(s(s(z)))))
_6 = lambda s,z:s(s(s(s(s(s(z))))))
_7 = lambda s,z:s(s(s(s(s(s(s(z)))))))
_8 = lambda s,z:s(s(s(s(s(s(s(s(z))))))))
_9 = lambda s,z:s(s(s(s(s(s(s(s(s(z)))))))))

#add = lambda x,y:lambda s,z:x(s,y(s,z))
def add(x,y):
    def curry0(s,z):
        return x(s,y(s,z))
    return curry0

定义的都是函数,没有值推导不会产生作用

z = 0
s = lambda x:x+1
print("_2        :",_2(s,z))
print("_3        :",_3(s,z))
print("_5        :",_5(s,z))
print("add(_2,_3):",add(_2, _3)(s,z))

给数字赋予新的意义 我们也可以用字符”+”的个数来代替我们定义的数字

z="" 
s= lambda x:x+"+"
print("_2        :",_2(s,z))
print("_3        :",_3(s,z))
print("_5        :",_5(s,z))
print("add(_2,_3):",add(_2, _3)(s,z))
leozp commented 4 years ago

原文 https://jijing.site/sicp/lambda_02_number.html