从理论上讲,如果计算问题需要输入和输出而没有副作用,那么lambda演算可能可以解决它(更一般地说,lambda演算是图灵完备的,请参阅Wikipedia)。
现在,对于实现,以下
lambda函数接受一个list参数,并返回一个列表,其中已删除所有重复项:
lambda l: (lambda u, a: u(u, a)) ((lambda f, x: x if len(x) <= 0 else (f(f, x[1:]) if x[0] in x[1:] else ([x[0]] + f(f, x[1:])))), l)
这是一个未包装的版本:
lambda l: (lambda u, a: u(u, a)) ( (lambda f, x: x if len(x) <= 0 else ( f(f, x[1:]) if x[0] in x[1:] else ([x[0]] + f(f, x[1:])) ) ), l )
该函数包含
lambda以下递归函数的版本:
def f(l): if len(l) <= 0: return l elif l[0] in l[1:]: return f(l[1:]) else: return ([l[0]] + f(l[1:]))
为了模拟递归调用,等效项
lambda需要一个附加函数作为参数,该函数本身就是:
lambda f, x: x if len(x) <= 0 else ( f(f, x[1:]) if x[0] in x[1:] else ([x[0]] + f(f, x[1:])) )
然后,另一个
lambda调用此先前的函数,将自身作为参数传递(除列表外):
lambda u, a: u(u, a)
最后,外部
lambda包装所有内容,仅使用列表作为参数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)