千里马。如何防止学位计算

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 不太擅长收回应用的恒等式,尤其是用于执行算术和其他操作的内置恒等式。