Bill Allombert on Mon, 22 Feb 2010 18:09:35 +0100


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

Re: Getting the variable number of a lexical local variable


On Sun, Feb 21, 2010 at 11:47:14PM -0500, Charles Greathouse wrote:
> I still can't seem to make it work properly with multiple variables.
> If I'm in a loop with formal variable y and I check polcoeff0(expr, 3,
> -1) with expr = 3*y + 5*x, it gives me 5, not 3.  I would like a way
> to get 3 when the formal variable is y and 5 when the formal variable
> is x.  Can this be done?

You should not use the prototype code V, but the code n instead.
This will give you the formal variable number (your function need to
take an extra argument of type 'long int'). 

The prototype code V is for functions that use the code E or I.
Such local variables are not formal variables and does not have a 
formal variable number (but they have a lexical variable number).

There are two very different notions:
1) formal variables and polynomials expressions
2) GP variable and GP code.

for 1) you use the code n, G and the function subst (or poleval, etc.)
for 2) you use the code V, E and push_lex/set_lex and closure_evalvoid/closure_evalgen. 

> I've attached my source, if this would help anyone understand what I'm
> doing.  Faulhaber(n, a) returns the n-Faulhaber polynomial (in a).
> 
> GEN
> sumformal(GEN start, GEN end, GEN expr)

What is prototype code do you use ?

I would suggest to use  "nGGG" and change the prototype to:
sumformal(long vy, GEN start, GEN end, GEN expr)
(vy will be the variable number of y).

Cheers,
Bill.