[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Axiom-developer] Re: init scripts
From: |
Vanuxem Grégory |
Subject: |
[Axiom-developer] Re: init scripts |
Date: |
Sat, 30 Jul 2005 21:49:26 +0200 |
Le samedi 30 juillet 2005 à 14:35 -0500, address@hidden a
écrit :
> Ok. Now I have a clue but it's subtle.
>
> You write this in your .axiom.input file:
>
> mrandom(x:Integer,v:Integer,z:Integer):ColumnMajorMatrix(SF) =
> a:=matrix([[random(x)::SF for i in 1..y] for j in
> 1..x])$ColumnMajorMatrix(SF)
> a
>
> You can't see this function even though it appears to be defined. That's
> because Axiom is working in a new frame.
Humm, I was thinking about that...
>
> When you start AXIOMsys you are running the interpreter talking directly
> to the terminal. So the .input file is actually talking to a frame
> at the top level. Your function is defined.
>
> The .axiom.input file is read in a "frame" called "initial".
> AXIOMsys only uses the "initial" frame (although you can define and
> use new ones). A frame contains its own variables and function definitions.
>
> The "axiom" command does several things that AXIOMsys does not. In
> particular the axiom shell script starts up the 'sman' process which
> starts AXIOMsys (which reads the .axiom.input file) and then sman
> creates a new frame (usually a random lisp gensym name). In this new
> frame (created after .axiom.input is read) your mrandom function is
> not defined.
>
> To see this do:
> AXIOMsys
> mrandom(3,3,3) -- compiles and runs the function
> )quit
>
> Now do:
> axiom
> mrandom(3,3,3) -- undefined function
> )frame next
> mrandom(3,3,3) -- compiles and runs the function
> )frame names -- shows you all of the defined frames
> )quit
>
>
> So with the axiom shell script the process is:
> axiom
> start sman (done by axiom shell script)
> sman starts AXIOMsys (done by sman)
> create frame "initial" (done by AXIOMsys)
> read .axiom.input (define your function here)
> create frame "G00234" (done by sman)
> put up a command prompt (in frame G00234, no functions defined)
> )frame next (done by you)
> .... and now you're back in frame initial
> .... and your function is there
>
>
> So your function was read and it is defined. However the function got
> defined in the "initial" frame (because you defined it in the .axiom.input
> file) and is not known in the frame created by sman. The ")frame next"
> command will move you around the ring of frames. (See the hardcopy book
> on page 579).
>
> Tim
>
>
Thank you very much
Cheers,
Greg