(wx)Maxima:`makelist` 是并行工作还是串行工作?

(wx)Maxima: does `makelist` work in parallel or serially?

我有兴趣创建一个列表,其项是递归定义的(即 term[i]term[i-1] 的函数, 而不是 [= 的函数13=]).

我认为如果 makelist 连续工作,那么调用上一个术语应该不是问题;但是,the documentation 没有明确说明术语是如何生成的。

初步尝试(注意:尽管此处的输出可以使用索引函数实现,但重点是创建一个简单的示例来测试调用先前项的能力,在 makelist 内) :

test:
makelist(block([ ], 
    
    /* list item set to 1 for first term of the list, and to previous list item, thereafter */  
    if i = 1 
    then addend 
    else test[i-1]
    )

, i, 5);

但是这个 returns [1, test[1], test[2], test[3], test[4] ] 所以它似乎并没有真正访问 test.

的值

我尝试了各种实验,包括初始化 test;包括在块中进行测试的调用,即 block([ test:test ], ... 和其他一些,但未能获得所需的结果。

这是一个很好的问题。 makelist 的结果与分配给它的变量无关(上例中的 test),因此当 makelist 构造其结果时,无法知道test[i - 1] 是上一项。我不认为有任何方法可以从 makelist 中访问上一个项目(例如通过一些 Lisp 编程或其他东西)。

关于 makelist 是串行还是并行,我 99% 确定元素是按顺序构建的。例如。 makelist(print(i), i, 1, 10) 打印从 1 到 10 的数字。

如果一个术语依赖于前一个术语,一种方法是创建一个空列表(例如 x: makelist(0, n))然后遍历元素(例如 x[1]: FOO; for i:2 thru n do x[i]: x[i - 1] + something)。