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

问题描述

我有兴趣创建一个列表,其术语是递归定义的(即 term[i]term[i-1]函数不是 i-1函数)。

我认为如果 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);

但这会返回 [1,test[1],test[2],test[3],test[4] ],因此它似乎并未实际访问 test 的值。

我尝试了各种实验,包括初始化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)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...