在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中会发生类似的情况吗?
答案 0 :(得分:2)
千里马的范围概念非常弱。基本上所有符号都在相同的范围内,因此当您声明a
时,它是a
的所有实例,甚至是函数参数的实例。
Maxima实际上是一个非常古老的程序,这是从未更新过的那些方面之一。有人讨论给予千里马一个更强的范围概念,但这需要一些时间。