在 Maxima 中使用 declare(var,constant) 的副作用

side-effects using declare(var,constant) in Maxima

在最大值中,是否有以下行为?

第一个例子:

(%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) 具有全局效果,这对我来说似乎很奇怪。第二个和第三个示例完全符合我的预期。

还有类似的情况在maxima中出现类似的情况吗?

Maxima 的范围概念非常薄弱。基本上所有的符号都在相同的范围内,所以当你声明 a 时,它是关于 a 的所有实例,甚至是函数参数。

Maxima 实际上是一个非常古老的程序,这是从未更新过的方面之一。有关于赋予 Maxima 更强的范围概念的讨论,但这需要一些时间。