仅使用Lambda函数删除重复项

仅使用Lambda函数删除重复项,第1张

仅使用Lambda函数删除重复项

从理论上讲,如果计算问题需要输入和输出而没有副作用,那么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
包装所有内容,仅使用列表作为参数。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5508462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存