Getting the coefficients of a polynomial



How can I get the coefficients of a polynomial in x?

Clearly I first put into into CRE form with main variable x:

     poly: rat(input_poly,x)$

Then what?  The internal form of the CRE lets you just "read off" the
coefficients at this point, but I can't think of any Maxima function that
lets you access that.

I can loop like this:

     coefs(p,v):=block([l:[]],while p # 0 do
(l:cons(r:ratcoef(p,v,0),l),p:(p-r)/v),l)

but that seems like an awful lot of work (*n* polynomial divisions).  It
also isn't very efficient for sparse polynomials like x^20000.  You could
do similar things with bothcoef or ratcoef, but again you end up building *n
* intermediate polynomials as you remove terms.

You might think you could use ratcoef for i:0..*n*, but how do you
determine *n*?  hipow is inefficient in that it converts the expression
into general representation first (!).

Am I missing some obvious solution, or do we need to add rat_hipow and
rat_coeffs or something?

      rat_hipow(x^3+a*x+1,x) => 3
      rat_coeffs(x^3+a*x+1,x) => [[3,1],[1,a],[0,1]]

Edge cases to think about: CREs with negative powers, cf.
ratcoef(1/x^3,x,-3) => 1, ratcoef(a/(b-x),x,-5) => -a*b^4, etc.

           -s