Karim Belabas on Sat, 06 Oct 2012 17:56:31 +0200

 Re: Comparing two integers in âincorrect type in comparisonâ according to GP.

```* Ewan Delanoy [2012-10-06 16:48]:
>  can anyone explain how to fix the code below. If I understood correctly, what happens that although
>  I know that the polcoeffâs I compute are integers on the examples I chose, the interpreter does not
>  and complains just because they *might* be non-integers. Should I use some kind of âconversion to intâ?

It depends on variable priorities, but in most settings they *are* non-integers
(at least in the stable branch 2.5.*; in the testing branch, the situation is
different):

(17:42) gp >  example_test=decompose(a1)
***   at top-level: example_test=decompose(a1)
***                              ^-------------
***   in function decompose: ...3,pair=temp[k];if(pair[2]>0,positive_part=con
***                                                      ^--------------------
*** _>_: incorrect type in comparison.
***   Break loop: type 'break' to go back to GP
break> pair[2]
0
break> type(pair[2])
"t_POL"
break> variable(pair[2])
a1

As a polynomial in variable a2, we have a1 = Pol(0,'a1)*a2^1 + Pol(1,;a1)*a2^0

The simplest solution is to replace

temp = simplify(temp);

>  aa_array=['a1,'a2,'a3]
>
>  decompose(expr)={
>  local(positive_part,negative_part,k,pair);
>  temp=vector(2,k,[k,polcoeff(expr,1,aa_array[k])]);
>  positive_part=[];
>  negative_part=[];
>  for(k=1,3,\
>  pair=temp[k];\
>  if(pair[2]>0,positive_part=concat(positive_part,[pair]););\
>  if(pair[2]<0,negative_part=concat(negative_part,[pair]););\
>  );
>  return([positive_part,negative_part])
>  }
>
>  example_test=decompose(a1)

Further remarks:
- temp was probably meant to be local() as well.
- This code will break again later because temp[k] is undefined for k = 3.
- The \ at end-of-line could be omitted
- You could use lists to simplify your code
positive_part = List();
...
listput(positive_part, pair);

Cheers,

K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`

```