最大值块和变量
Maxima block and variable
我想使用块命令显示数字 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"变量?
简短的回答是 quote-quote 仅在输入表达式时应用,而不是在计算表达式时应用。尝试 grind(myList);
以查看 quote-quote 已将 expr
的当前值插入(粘贴)到函数定义中。
较长的答案是 Maxima 通常采用一次性评估策略(即变量只评估一次),但某些函数 "quote"(不评估)它们的参数或以特殊的方式评估它们的参数方式,makelist
就是其中之一。这使得编写像 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]
我想使用块命令显示数字 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"变量?
简短的回答是 quote-quote 仅在输入表达式时应用,而不是在计算表达式时应用。尝试 grind(myList);
以查看 quote-quote 已将 expr
的当前值插入(粘贴)到函数定义中。
较长的答案是 Maxima 通常采用一次性评估策略(即变量只评估一次),但某些函数 "quote"(不评估)它们的参数或以特殊的方式评估它们的参数方式,makelist
就是其中之一。这使得编写像 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]