在 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 更强的范围概念的讨论,但这需要一些时间。
在最大值中,是否有以下行为?
第一个例子:
(%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 更强的范围概念的讨论,但这需要一些时间。