axiom-mail
[Top][All Lists]
Advanced

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

Re: [Axiom-developer] Re: [Axiom-mail] Assigning to Element of Array of


From: Martin Rubey
Subject: Re: [Axiom-developer] Re: [Axiom-mail] Assigning to Element of Array of Records Doesn't Seem to Work
Date: 08 Aug 2007 13:36:52 +0200
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4

Maybe you could try to compile the same thing with libaxiom?

Martin

Ralf Hemmecke <address@hidden> writes:

> I think you have just found a bug in the Axiom interpreter/compiler.
> 
> The following Aldor program compiles fine.
> 
> aldor -fx -laldor aaa.as
> 
> and gives as output
> 
> xs = [
>    [0, 0]
>    [0, 0]
>    [10, 0]
> ]
> 
> ys = [
>    [0, 0]
>    [0, 0]
>    [10, 0]
> ]
> 
> Don't be distracted by this output stuff (TextWriter). Your code basically
> appears in the main() function. And in Aldor that works.
> 
> Since this special form of assignment is actually a call to the function set!
> (Aldor) the line
> 
>    ys(2).k := 10;
> 
> is equivalent to
> 
>    set!(ys(2), k, 10);
> 
> There is no problem with the actual form of the first argument of set!. As 
> long
> as there is a function
> 
>    set!: (R, Enumeration(k: Type), INT) -> INT
> 
> that should compile fine. Well, and "ys(2)" is of type R.
> (Of course, all this is Aldor specific, but Axiom should try hard to get 
> close.)
> 
> I have no idea, though, why Axiom is unable to deal correctly with that
> expression. That should be dealt with by our compiler experts.
> 
> Ralf
> 
> 
> 
> 
> ---BEGIN aaa.as
> #include "aldor"
> #include "aldorio"
> 
> INT == MachineInteger;
> R ==> Record(k: INT, rad: INT);
> import from R, INT;
> 
> initrec(): R == [0,0];
> 
> (tw: TextWriter) <= (r: R): TextWriter == {
>    tw << "[" << r.k << ", " << r.rad << "]"
> }
> (tw: TextWriter) << (g: Generator R): TextWriter == {
>    tw << "[" << newline;
>    for r in g repeat tw << "  " <= r << newline;
>    tw << "]" << newline;
> }
> 
> 
> main(): () == {
>    xs: List R := [initrec() for i in 1..3];
>    ys: Array R := [z for z in xs];
>    ys(2).k := 10;
>    stdout << "xs = " << generator xs << newline;
>    stdout << "ys = " << generator ys << newline;
> }
> 
> main();---END aaa.as
> 
> On 08/08/2007 11:41 AM, Bill Wood wrote:
> > I'm just trying to assign to a field of a record in a one-dimensional
> > array of records, but I get this incomprehensible message:
> > =====================================================================
> > (1) -> )clear all
> >    All user variables and function definitions have been cleared.
> > (1) -> )read foo.input
> > -- File of Axiom definitions solving problem 124.
> > -- Created 2007/08/08 by Bill Wood.
> > init_rec() ==
> >   r : Record(k: INT, rad: INT) := [0,0]
> >   r
> >                                            Type: Void
> > (2) -> xs := [init_rec() for i in 1..3]
> >    Compiling function initrec with type () -> Record(k: Integer,rad:
> >       Integer)
> >    (2)  [[k= 0,rad= 0],[k= 0,rad= 0],[k= 0,rad= 0]]
> >                       Type: List Record(k: Integer,rad: Integer)
> > (3) -> ys := oneDimensionalArray(xs)
> > (3) ->
> >    (3)  [[k= 0,rad= 0],[k= 0,rad= 0],[k= 0,rad= 0]]
> >            Type: OneDimensionalArray Record(k: Integer,rad: Integer)
> > (4) -> ys
> > (4) ->
> >    (4)  [[k= 0,rad= 0],[k= 0,rad= 0],[k= 0,rad= 0]]
> >            Type: OneDimensionalArray Record(k: Integer,rad: Integer)
> > (5) -> ys(2).k := 10
> >  5) ->
> >    The form on the left hand side of an assignment must be a single
> >       variable, a Tuple of variables or a reference to an entry in an
> >       object supporting the setelt operation.
> > (5) ->
> > =======================================================================
> > What do I have to do to set the fields of the records to desired
> > values???
> >  -- Bill Wood
> 
> 
> _______________________________________________
> Axiom-developer mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/axiom-developer





reply via email to

[Prev in Thread] Current Thread [Next in Thread]