最大块和变量

时间:2017-03-15 19:59:09

标签: maxima

我想使用块命令显示数字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]

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

1 个答案:

答案 0 :(得分:0)

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

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

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

apply