Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 咖喱和递归_Python_Functional Programming - Fatal编程技术网

Python 咖喱和递归

Python 咖喱和递归,python,functional-programming,Python,Functional Programming,我的问题与这里的问题密切相关: ,这是CodeWars上的“链添加函数”问题。 链接中有很多有用的解决方案,但我只想找出我自己的解决方案有什么问题 例如,我想到的第一件事就是使用咖喱 def add(a): def add2(b): return b + a return add2 add(1)(2) 将给我3作为输出 现在我想添加递归,以便add(1),add(1)(2)(3)和add(1)(2)(3)(4)等也可以按预期工作: def add(a):

我的问题与这里的问题密切相关: ,这是CodeWars上的“链添加函数”问题。 链接中有很多有用的解决方案,但我只想找出我自己的解决方案有什么问题

例如,我想到的第一件事就是使用咖喱

def add(a):
    def add2(b):
        return b + a
    return add2

add(1)(2)
将给我
3
作为输出

现在我想添加递归,以便
add(1)
add(1)(2)(3)
add(1)(2)(3)(4)
等也可以按预期工作:

def add(a):
    if not callable(a):
        return a
    else:
        def add2(b):
            return b + add(a)
        return add2
这一次
add(1)
按预期返回
1
,但
add(1)(2)
add(1)(2)(3)
等给出错误:

TypeError: 'int' object is not callable
有人能指出这里出了什么问题吗?此外,如何解决呢?非常感谢你的帮助

有人能指出这里出了什么问题吗

当您使用
add(1)
调用它时,
a
1
(因此不可调用),它将返回
1
。下一步:您将有
1(2)
,但由于
1
不是可调用的,因此此操作失败

此外,如何解决呢


您不能,因为您需要知道何时结束递归,但您只知道在完成当前步骤后是否需要更深一层。因此,不幸的是,您选择的方法将不起作用,您必须寻找不同的方法。这就是你的

@MSeifert正确的地方,实际上应该是重复的,但正如你所能做的:

class myint(int):
    def __call__(self, i):
        return myint(self + i)
def add(v):
    return myint(v)
现在:

或一行:

class add(int):__call__ = lambda self, v: add(self+v)
add = lambda v: type("", (int,), {"__call__": lambda self, v: self.__class__(self + v)})(v)
或另一个一行:

class add(int):__call__ = lambda self, v: add(self+v)
add = lambda v: type("", (int,), {"__call__": lambda self, v: self.__class__(self + v)})(v)
它们每一个都输出:

>>> add(1)(2)
3
>>> add(1)(2)(3)
6

可能的副本是从副本中复制的吗(除了不同的变量名)?@MSeifert是的,但希望OP理解,但实际上是的,我认为我应该删除我的answer@MSeifert我这样做是因为OP看到了这个,但无法嵌入它(我不知道为什么?@U9转发感谢您的回答,在问我自己的问题之前,我已经看完了所有相关问题的解决方案。这些解决方案没有解决我的问题,所以我问了一个新的。