Function 全局函数与参数函数极大值之间的冲突

Function 全局函数与参数函数极大值之间的冲突,function,scope,arguments,maxima,polynomials,Function,Scope,Arguments,Maxima,Polynomials,用极大值中的多项式,我做了一个函数,从一个多项式得到另一个具有相同根的多项式,但都很简单 simplify(p):=block( local(q,d,c), define(q(x),diff(p(x),x)), define(d(x),gcd(p(x),q(x))), define(c(x),divide(p(x),d(x))[1]), return(c(x)) ); 当我将函数与多项式s一起使用,并且外部没有定义p时,一切正常: (%i1) s(x):=x^2-1;

用极大值中的多项式,我做了一个函数,从一个多项式得到另一个具有相同根的多项式,但都很简单

simplify(p):=block(
  local(q,d,c),
  define(q(x),diff(p(x),x)),
  define(d(x),gcd(p(x),q(x))),
  define(c(x),divide(p(x),d(x))[1]),

  return(c(x))
);
当我将函数与多项式
s
一起使用,并且外部没有定义
p
时,一切正常:

(%i1)   s(x):=x^2-1;
        simplify(s);

(%o1)   s(x):=x^2-1
(%o2)   x^2-1
但是,定义多项式
p
后,一切都会发生变化:

(%i3)   p(x):=x^6-5*x^5-10*x^4+86*x^3-99*x^2-81*x+108;

(%o3)   p(x):=x^6-5x^5+(-10)*x^4+86*x^3+(-99)*x^2+(-81)*x+108

(%i4)   simplify(p);
(%o4)   x^4+x^3-13x^2-x+12

(%i5)   simplify(s);
(%o5)   x^4+x^3-13x^2-x+12
我认为,问题在于,极大值将
p
作为全局函数,一旦定义,它就不再将函数
s
作为参数


是否有一种方法可以在函数内部指示我们要使用参数函数
p
而不是全局函数?我还没有找到任何替代方法来区分这两个函数。

您认为
p
的全局定义取代了其他任何函数是正确的。Maxima对范围有一些混乱的想法,这就是其中之一;我认为这是一个严重的问题。

无论如何,要解决这个问题,您可以在作为参数的函数中将
p
声明为本地。我想你可以把
p
放在
simplify
中的
local
声明中