0
在maxima中,是否有以下行爲意圖?在Maxima中使用聲明(var,constant)的副作用
第一個例子:
(%i1) declare(a,constant);
(%o1) done
(%i2) constantp(a);
(%o2) true
(%i3) square(a):=a^2;
define: in definition of square, found bad argument a
-- an error. To debug this try: debugmode(true);
(%i4) load("linearalgebra.mac");
define: in definition of dotproduct, found bad argument a
-- an error. To debug this try: debugmode(true);
第二個例子:
(%i1) a:5;
(%o1) 5
(%i2) constantp(a);
(%o2) true
(%i3) square(a):=a^2;
2
(%o3) square(a) := a
(%i4) square(a);
(%o4) 25
第三個例子:
(%i1) declare(a,scalar);
(%o1) done
(%i2) mat_f(a,b):=a.b - b.a;
(%o2) mat_f(a, b) := a . b - b . a
(%i4) mat_f(matrix([1,2],[3,4]),matrix([3,4],[1,2]));
[ - 10 - 14 ]
(%o4) [ ]
[ 6 10 ]
好像declare(a,constant)
有這對我的極大似乎很奇怪一個全球性的影響。第二個和第三個例子完全按照我期望的方式工作。
也有類似的情況下,像這樣的事情發生在最大值?
因此,無論何時加載像'linearalgebra.mac'這樣的包,我必須檢查其函數定義中使用的變量的源代碼?或者在進行任何聲明之前確保在程序開始時加載它就足夠了?我經常使用函數而不顯式加載包,這樣有點不方便。 – kalix
可能最好的方法是在聲明之前加載你需要的包。這當然不是很令人滿意,因爲它只是必要的,因爲Maxima無法區分不同範圍的符號。 –