Maxima:累积地将函数应用于列表的原子
Maxima: cummulatively apply function to a list's atoms
有没有一种方法可以将函数累积应用于列表的每个原子?例如:
wishedFunction("+",[1,2,4,7,3])
将计算 (((1+2)+4)+7)+3
,因此 return 17
换句话说,我正在寻找相当于 python reduce()
function 的最大值。
我已经阅读了 map()
和 scanmap()
函数的文档,但它们的行为方式不同......
有什么建议吗?
看来 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]
其实你要找的确实是内置的reduce
函数之一(lreduce
、rreduce
、xreduce
、tree_reduce
) .
(%i1) xreduce ("+", [1,2,4,7,3]);
(%o1) 17
抱歉,我误解了你的问题。我在想你想要一个 returns 带有累积部分结果的列表的函数。显然这是不正确的。抱歉造成混淆。
有没有一种方法可以将函数累积应用于列表的每个原子?例如:
wishedFunction("+",[1,2,4,7,3])
将计算 (((1+2)+4)+7)+3
,因此 return 17
换句话说,我正在寻找相当于 python reduce()
function 的最大值。
我已经阅读了 map()
和 scanmap()
函数的文档,但它们的行为方式不同......
有什么建议吗?
看来 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]
其实你要找的确实是内置的reduce
函数之一(lreduce
、rreduce
、xreduce
、tree_reduce
) .
(%i1) xreduce ("+", [1,2,4,7,3]);
(%o1) 17
抱歉,我误解了你的问题。我在想你想要一个 returns 带有累积部分结果的列表的函数。显然这是不正确的。抱歉造成混淆。