Ahh, I *was* doing something stupid! Thank you Bill, it seems so obvious now you've pointed it out.

Thanks,
Paul


On 11 Aug 2015, at 22:06, Bill Page wrote:

The problem is that the return type of 'coefficient' when called with
'Symbol' is of type 'Polynomial Fraction Integer'.

Try it this way:

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

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

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


On 11 August 2015 at 16:03, Paul Onions <[email protected]> wrote:
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.

--
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.

--
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