Currying and Recursion
我的问题与这里的问题密切相关:
Python中的函数链
,也就是 CodeWars 上的"加链函数"问题。
链接中有很多有用的解决方案,但我只是想找出我自己的解决方案有什么问题。
首先想到的是使用柯里化,例如
1 2 3 4 5 6 | def add(a): def add2(b): return b + a return add2 add(1)(2) |
会给我
现在我想添加递归,以便
1 2 3 4 5 6 7 | def add(a): if not callable(a): return a else: def add2(b): return b + add(a) return add2 |
这一次
1 | TypeError: 'int' object is not callable |
谁能指出这里有什么问题?此外,如何解决?非常感谢您的帮助!
Can anyone point out what's wrong here?
当你用
Furthermore, how to resolve it?
你不能,因为你需要知道什么时候结束递归,但你只知道在你完全完成当前步骤之后是否需要更深一层。所以不幸的是,您选择的方法不起作用,您必须寻找不同的方法。这就是您链接到有关函数链接的问题的地方。
@MSeifert 是对的,实际上应该是重复的,但你可以这样做:
1 2 3 4 5 | class myint(int): def __call__(self, i): return myint(self + i) def add(v): return myint(v) |
现在:
1 2 3 4 | >>> add(1)(2) 3 >>> add(1)(2)(3) 6 |
或单线:
1 | class add(int):__call__ = lambda self, v: add(self+v) |
或者另一个单行:
1 | add = lambda v: type("", (int,), {"__call__": lambda self, v: self.__class__(self + v)})(v) |
每一个输出:
1 2 3 4 | >>> add(1)(2) 3 >>> add(1)(2)(3) 6 |