On 05/14/2008 05:26 PM, Gabriel Dos Reis wrote:
> Waldek Hebisch <[EMAIL PROTECTED]> writes:
> 
> | Gabriel Dos Reis wrote:
> | > 
> | > The definition of the function recip$NormalizationPackage elicites
> | > a `semantic error' from the compiler because the local variable
> | > `hesrg' is defined in the two branches of an if-statement with two
> | > differen types.  That looks like a bug to me.  Opinion?
> | > 
> | >      recip(p:P,ts:TS): Record(num:P, den:P) ==
> | >      -- ASSUME p is invertible w.r.t. ts
> | >      -- ASSUME mvar(p) is algebraic w.r.t. ts
> | >        v := mvar(p)
> | >        ts_v := select(ts,v)::P
> | >        if mdeg(p) < mdeg(ts_v)
> | >          then
> | >            hesrg: Record (gcd : P, coef2 : P)  := 
> halfExtendedSubResultantGcd2(ts_v,p)$P
> | >            d: P :=  hesrg.gcd; n: P := hesrg.coef2
> | >          else
> | >            hesrg: Record (gcd : P, coef1 : P) := 
> halfExtendedSubResultantGcd1(p,ts_v)$P
> | >            d: P :=  hesrg.gcd; n: P := hesrg.coef1
> | >        g := gcd(n,d)
> | >        (n, d) := ((n exquo g)::P, (d exquo g)::P)
> | >        remn, remd: Record(rnum:R,polnum:P,den:R)
> | >        remn := remainder(n,ts); remd := remainder(d,ts)
> | >        cn := remn.rnum; pn := remn.polnum; dn := remn.den
> | >        cd := remd.rnum; pd := remd.polnum; dp := remd.den
> | >        k: K := (cn / cd) * (dp / dn)
> | >        pn := removeZero(pn,ts)
> | >        pd := removeZero(pd,ts)
> | >        [numer(k) * pn, denom(k) * pd]$Record(num:P, den:P)
> | > 
> | > 
> | 
> | I belive that Axiom creators considered this function legal,
> | so generating error message would be a bug.
> 
> Hmm, could you give me hints at to why they considered the function legal?

Gaby, this case looks so simple. Rename hesrg in the "then" branch to 
hesrg2 and to hesrg1 in the "else" branch.

Do you really think because of code such as this, you would have to 
introduce separate scopes for "then" end "else"? The variable hesrg is 
completely local to each of the branches respectively. It is not needed 
outside the "if".

The code is legacy stuff and is wrong (as you pointed out) because the 
compiler did not signal an error. Because there is no error from the 
compiler, the creators probably thought that everything is OK. Of 
course, that does not mean that the code is without bugs.

Ralf

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
open-axiom-devel mailing list
open-axiom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open-axiom-devel

Reply via email to