Re: [Axiom-developer] Re: Assigning to Element of Array of Records Doesn't Seem to Work

Martin Rubey <[email protected]>
Newsgroups gmane.comp.mathematics.axiom.user,gmane.comp.mathematics.axiom.devel
Message-ID <[email protected]>
Maybe you could try to compile the same thing with libaxiom?

Martin

Ralf Hemmecke <[email protected]> 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
> [email protected]
> http://lists.nongnu.org/mailman/listinfo/axiom-developer
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.