有没有办法将函数累积地应用于列表的每个原子?例如:Maxima:将函数应用于列表的原子
wishedFunction("+",[1,2,4,7,3])
将计算(((1+2)+4)+7)+3
,因此返回17
换句话说,我要寻找最大值相当于python reduce()
function一个。
我已经阅读了map()
和scanmap()
功能的文件,但他们不行为相同的方式...
有什么建议?
有没有办法将函数累积地应用于列表的每个原子?例如:Maxima:将函数应用于列表的原子
wishedFunction("+",[1,2,4,7,3])
将计算(((1+2)+4)+7)+3
,因此返回17
换句话说,我要寻找最大值相当于python reduce()
function一个。
我已经阅读了map()
和scanmap()
功能的文件,但他们不行为相同的方式...
有什么建议?
你正在寻找其实什么确实是一个内置reduce
功能(lreduce
,rreduce
,xreduce
,tree_reduce
)。
(%i1) xreduce ("+", [1,2,4,7,3]);
(%o1) 17
对不起,我误解了你的问题。我在想,你想要一个函数返回一个列表与积累的部分结果。显然这是不正确的。对困惑感到抱歉。
看起来像lreduce
和朋友(rreduce
,xreduce
,tree_reduce
)不按照你想要的方式行事。我不知道这样做的功能;也许你可以输入一个功能请求。请参阅:https://sourceforge.net/p/maxima/feature-requests/
这是一个功能。免责声明:我没有想太多。
(%i41) foo (f, L) :=
block ([x0 : first (L)],
cons (first (L),
makelist (x0 : f(x0, x), x, rest (L)))) $
(%i42) foo (g, [1,2,3,4]);
(%o42) [1, g(1, 2), g(g(1, 2), 3), g(g(g(1, 2), 3), 4)]
(%i43) foo ("+", [1,2,3,4]);
(%o43) [1, 3, 6, 10]
感谢您的回答:我刚刚在您的建议中在sourceforge上添加了一张票。 – 2015-04-03 07:49:33