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

时间:2016-03-24 14:45:07

标签: maxima

在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中会发生类似的情况吗?

1 个答案:

答案 0 :(得分:2)

千里马的范围概念非常弱。基本上所有符号都在相同的范围内,因此当您声明a时,它是a的所有实例,甚至是函数参数的实例。

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