Hi All,

Does anybody understand why the following fails?

-- test2.spad ----------------------------------
)abbrev package TEST2 Test2

Test2 : Exports == Implementation where
  R ==> Fraction Integer

  Exports == with
    listCoeffs: Polynomial(R) -> List(R)

  Implementation == add
    listCoeffs p ==
      v : Symbol := variables(p).1
      d : NonNegativeInteger := degree(p,v)
      [coefficient(p,v,n) for n in 0..d]
------------------------------------------------

When I attempt to )compile it I get:-

****** comp fails at level 1 with expression: ******
error in function listCoeffs

((|coefficient| |p| |v| |n|))
****** level 1  ******
$x:= (coefficient p v n)
$m:= (Fraction (Integer))
$f:=
((((|n| # #) (|d| #) (|v| #) (|last| #) ...)))

   >> Apparent user error:
   cannot compile (coefficient p v n)


and similarly, if I put the code in a .input file as:-

-- test2.input ---------------------------------
R ==> Fraction Integer

listCoeffs: Polynomial(R) -> List(R)

listCoeffs p ==
  v : Symbol := variables(p).1
  d : NonNegativeInteger := degree(p,v)
  [coefficient(p,v,n) for n in 0..d]
------------------------------------------------

then )read works, but when I try to call the function I get:-

(4) -> f : POLY(Fraction Integer) := 3*x^2 + 1

          2
   (4)  3x  + 1
Type: Polynomial(Fraction(Integer))
(5) -> listCoeffs f
   There are 2 exposed and 2 unexposed library operations named
      coefficient having 3 argument(s) but none was determined to be
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      to learn more about the available operations. Perhaps
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
   Cannot find a definition or applicable library operation named
      coefficient with argument type(s)
                        Polynomial(Fraction(Integer))
                                   Symbol
                             NonNegativeInteger

      Perhaps you should use "@" to indicate the required return type,
      or "$" to specify which version of the function you need.
   FriCAS will attempt to step through and interpret the code.
   Compiling function listCoeffs with type Polynomial(Fraction(Integer)
      ) -> List(Fraction(Integer))
   There are 2 exposed and 2 unexposed library operations named
      coefficient having 3 argument(s) but none was determined to be
      applicable. Use HyperDoc Browse, or issue
                           )display op coefficient
      to learn more about the available operations. Perhaps
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.

   Cannot find a definition or applicable library operation named
      coefficient with argument type(s)
                        Polynomial(Fraction(Integer))
                                   Symbol
                             NonNegativeInteger

      Perhaps you should use "@" to indicate the required return type,
      or "$" to specify which version of the function you need.


but looking at the SPAD source code in multpoly.spad and polycat.spad I see there is a default implementation of coefficient(p,v,n) in the PolynomialCategory(R,E,VarSet) definition. What's more, if I evaluate each line of the function manually at the REPL then things work.

This is in FriCAS 1.2.6.  Am I doing something stupid?

Any pointers appreciated,
Paul

--
You received this message because you are subscribed to the Google Groups "FriCAS - 
computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to