全局函数和参数函数Maxima之间的冲突

时间:2016-03-07 16:51:06

标签: function scope arguments maxima polynomials

在Maxima中使用多项式,我正在创建一个函数,从多项式中获得具有相同根的多项式,但所有这些都很简单。

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

我认为,这个问题是由于Maxima将p作为全局函数,一旦定义,然后它不再将s作为参数给出。

有没有办法在函数内部指示我们要使用参数函数p而不是全局函数?我没有找到区分两种功能的替代方案。

1 个答案:

答案 0 :(得分:1)

你是正确的p的全球定义取代任何其他定义。千里马对范围有一些疑惑,这是其中之一;我认为这是一个严重的问题。

无论如何要解决它,你可以将p声明为函数中的本地参数。我想您可以将p放在local的{​​{1}}声明中。