我想使用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"?
发布于 2017-03-17 04:43:09
简而言之,quote-quote仅在输入表达式时应用,而不是在计算时应用。尝试使用grind(myList);查看quote-quote是否已将expr的当前值插入(粘贴)到函数定义中。
更长的答案是,Maxima通常有一个一次性的求值策略(即变量只求值一次),但是一些函数“引用”(不求值)他们的参数或以一种特殊的方式评估他们的参数,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]https://stackoverflow.com/questions/42819545
复制相似问题