【问题标题】:Maxima block and variableMaxima 块和变量
【发布时间】:2017-03-15 19:59:09
【问题描述】:

我想使用 block 命令显示数字 1 到 5 的平方:

expr : 10*i;

myList (expr, iMin, iMax) := block(
  local(expr),
  print(expr),
  print(''expr),
  print( makelist(expr, i, iMin, iMax)),
  print( makelist(''expr, i, iMin, iMax)) 
 )$

ai : i^2$
myList (ai,1,5);

这是我使用此代码得到的结果:

i^2
10*i
[i^2,i^2,i^2,i^2,i^2]
[10,20,30,40,50]

为什么myList中的“expr”变量(带引号)不是变量“ai”?

【问题讨论】:

    标签: maxima


    【解决方案1】:

    简短的回答是,quote-quote 仅在输入表达式时应用,而不是在计算时应用。尝试grind(myList); 看看quote-quote 已将expr 的当前值插入(粘贴)到函数定义中。

    更长的答案是,Maxima 通常具有一次性评估策略(即变量只评估一次),但有些函数“引用”(不评估)它们的参数或以一种特殊的方式评估它们的参数,并且 @ 987654323@ 就是其中之一。这使得编写像 myList 这样想要为 makelist 提供参数的函数变得很棘手。

    我的建议是写apply(makelist, [...])(即将makelist 应用于参数列表)而不是makelist(...)。使用apply 编写它将确保对参数进行评估。

    (%i5) myList(expr, iMin, iMax) := apply (makelist, [expr, i, iMin, iMax]) $
    (%i6) expr:i^2 $
    (%i7) myList(expr, 1, 5);
    (%o7)                          [1, 4, 9, 16, 25]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多