千里马:累积地将函数应用于列表的原子

时间:2015-04-02 09:23:44

标签: list maxima

有没有办法将函数累加应用于列表的每个原子?例如:

wishedFunction("+",[1,2,4,7,3])

计算(((1+2)+4)+7)+3并因此返回17

换句话说,我正在寻找相当于python reduce() function的最大值。

我已阅读map()scanmap()函数的文档,但它们的行为方式不同......

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

看起来lreduce和朋友(rreducexreducetree_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]

答案 1 :(得分:2)

实际上,您所寻找的确实是内置的reduce函数之一(lreducerreducexreducetree_reduce)。

(%i1) xreduce ("+", [1,2,4,7,3]);
(%o1)                                 17

抱歉,我误解了你的问题。我在想你想要一个返回带有累积部分结果的列表的函数。显然这是不正确的。对不起,感到困惑。