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