参数数目可变的Python curried函数
给定参数数目可变的Python curried函数,python,functional-programming,currying,Python,Functional Programming,Currying,给定n,我想创建一个函数,它接收n元素并将它们作为列表返回。一种方法是: def g(n): def f(*l): assert len(l) == n return l return f 我的问题是:我希望返回函数是 结果是这样的,但对于所有n: def g(n): if n == 1: return lambda i: [i] if n == 2: return lambda i1: lambda i2: [i1, i2] if n == 3
n
,我想创建一个函数,它接收n
元素并将它们作为列表返回。一种方法是:
def g(n):
def f(*l):
assert len(l) == n
return l
return f
我的问题是:我希望返回函数是
结果是这样的,但对于所有n
:
def g(n):
if n == 1: return lambda i: [i]
if n == 2: return lambda i1: lambda i2: [i1, i2]
if n == 3: return lambda i1: lambda i2: lambda i3: [i1, i2, i3]
...
我的第一个方法是这样的:
def g(n):
if n == 1: return lambda i: [i]
return lambda i: g(n-1) + [i]
这不起作用:g(n-1)
返回一个函数,因此无法将其添加到列表中。有办法吗
似乎我需要以某种方式将输入“传递”到g(n-1)
,获得g(n-1)
的输出,然后固定[I]
,但我不知道如何“撬开”g(n-1)
来固定,同时保持正确的输入类型
我试着用python搜索咖喱,但我只得到了一些基本的例子。我是函数式编程新手,如果我的术语不全,我很抱歉。我想到了这个:
def(n,prev=None):
如果prev为无:
prev=[]
如果n==1:
返回λx:prev+[x]
其他:
返回λx:f(n-1,prev=prev+[x])
#f(3)创建长度为3的列表
#其他调用将一个元素附加到列表中,直到达到长度3为止
断言f(3)(1)(2)(3)=[1,2,3]