千里马。如何防止学位计算
Maxima. How to prevent degree calculations
是否可以防止幂表达式中的所有计算?也许通过预处理表达式或添加 tellimp 规则?或者其他方式?
例如
distrib (10 ^ 10 * (x + 1));
产生:
1000000000 x + 1000000000
改为发出:
10 ^ 10 * x + 10 ^ 10
同样
factor (10 ^ 10 * x + 10 ^ 10);
返回:
10 ^ 10 * (x + 1);
就像
factor(200);
2^3*5^2
代表数字的力量,只是永久的吗?
有趣的问题,虽然我没有看到好的解决方案。这是我作为实验尝试过的东西,它以因式分解形式显示整数。我正在使用 Maxima 5.44.0 + SBCL。
(%i1) :lisp (defun integer-formatter (x) ($factor x))
INTEGER-FORMATTER
(%i1) :lisp (setf (get 'integer 'formatter) 'integer-formatter)
INTEGER-FORMATTER
(%i1) (x + 1000)^3;
3 3 3
(%o1) (x + 2 5 )
(%i2) 10^10*(x + 1);
2 5 2 5
(%o2) (2 5 ) (x + 1)
这只是对显示的修改;内部表示只是一个整数。
(%i3) :lisp $%
((MTIMES SIMP) 10000000000 ((MPLUS SIMP) 1 $X))
这似乎有点笨拙,因为例如2^(2*5)*5^(2*5)
并不比 10000000000
更容易理解。
另一个问题是 10^10
上的算术是否可以被抑制,因此它实际上保持为 10^10
而不是在内部表示为 10000000000
。我很确定那会很困难。不幸的是,Maxima 不太擅长收回应用的恒等式,尤其是用于执行算术和其他操作的内置恒等式。
是否可以防止幂表达式中的所有计算?也许通过预处理表达式或添加 tellimp 规则?或者其他方式?
例如
distrib (10 ^ 10 * (x + 1));
产生:
1000000000 x + 1000000000
改为发出:
10 ^ 10 * x + 10 ^ 10
同样
factor (10 ^ 10 * x + 10 ^ 10);
返回:
10 ^ 10 * (x + 1);
就像
factor(200);
2^3*5^2
代表数字的力量,只是永久的吗?
有趣的问题,虽然我没有看到好的解决方案。这是我作为实验尝试过的东西,它以因式分解形式显示整数。我正在使用 Maxima 5.44.0 + SBCL。
(%i1) :lisp (defun integer-formatter (x) ($factor x))
INTEGER-FORMATTER
(%i1) :lisp (setf (get 'integer 'formatter) 'integer-formatter)
INTEGER-FORMATTER
(%i1) (x + 1000)^3;
3 3 3
(%o1) (x + 2 5 )
(%i2) 10^10*(x + 1);
2 5 2 5
(%o2) (2 5 ) (x + 1)
这只是对显示的修改;内部表示只是一个整数。
(%i3) :lisp $%
((MTIMES SIMP) 10000000000 ((MPLUS SIMP) 1 $X))
这似乎有点笨拙,因为例如2^(2*5)*5^(2*5)
并不比 10000000000
更容易理解。
另一个问题是 10^10
上的算术是否可以被抑制,因此它实际上保持为 10^10
而不是在内部表示为 10000000000
。我很确定那会很困难。不幸的是,Maxima 不太擅长收回应用的恒等式,尤其是用于执行算术和其他操作的内置恒等式。