【问题标题】:(wx)Maxima: does `makelist` work in parallel or serially?(wx)Maxima:`makelist` 是并行工作还是串行工作?
【发布时间】:2021-05-24 22:36:41
【问题描述】:

我有兴趣创建一个以递归方式定义术语的列表(即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;包括在块中调用测试,即block([ test:test ], ... 和其他一些,但未能获得所需的结果。

【问题讨论】:

    标签: list recursion maxima wxmaxima


    【解决方案1】:

    这是一个很好的问题。 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)。

    【讨论】:

    • 谢谢罗伯特——了解更多关于 Maxima 的内部工作原理总是很有趣的!一如既往,非常感谢您抽出宝贵时间分享您的知识和见解!
    猜你喜欢
    • 2017-06-06
    • 2012-02-17
    • 1970-01-01
    • 2020-04-29
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多