(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
)。
我有兴趣创建一个列表,其项是递归定义的(即 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
)。