[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Axiom-developer] init scripts
From: |
daly |
Subject: |
[Axiom-developer] init scripts |
Date: |
Sat, 30 Jul 2005 14:35:29 -0500 |
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.
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