axiom-math
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

## [Axiom-math] Re: [Axiom-mail] Lexicographic order

 From: Martin Rubey Subject: [Axiom-math] Re: [Axiom-mail] Lexicographic order Date: Tue, 30 Aug 2005 11:46:49 +0200

```Dear Jens,

Jens Axel Søgaard writes:

> Part of my problem was that I had to polynomials, which might be belong
> to polynomial rings over different variables.  [...]

> Lexorder examines the difference of exponent vectors of the multivariate
> polynomials p and q. If the leftmost non-zero entry is positive, then p>q.
>
> lexorder?(p,q) ==
>    if  empty?(variables(p))
>    then return ~empty?(variables(q))
>    else
>      vars := sort(members(union(set(variables(p)),
>                                 set(variables(q))))::List Symbol)
>      a := vector(members(degree( p::DMP(vars,?) )))
>      b := vector(members(degree( q::DMP(vars,?) )))
>      n := select( x +-> ~zero?(x), members(a-b))
>      if empty?(n)
>      then return false
>      else return positive?(first(n))

You probably get a better understanding if you declare your functions. For
example, instead of

lexorder?(p,q) ==

write

lexorder?(p: POLY INT, q: POLY INT): Boolean ==

This also helps the reader to get a fealing what your code is about.

I do admit tht there is an unfortunate restriction about declared functions: it
is not possible to define "generic" declared functions in the interpreter, you
have to use packages for that. For example, if you want to have a function
lexorder? that works for polynomials over an arbitrary ring, you have only two
choices: not declare your function at all, as you did it in the first place, or
write a package, i.e., a file with extension .spad containing

)abbrev package TEST Test
Test(R: Ring): with

lexorder?: (Polynomial R, Polynomial R) -> Boolean

== add

lexorder?(p, q) == code comes here

Note that spad code is indentation sensitive and abbreviations like POLY for
Polynomial are not allowed. If you prefer, aldor provides a non-indentation
sensitive syntax...

Martin

```

reply via email to

 [Prev in Thread] Current Thread [Next in Thread]