On Monday, October 16, 2006 7:30 PM Gabriel Dos Reis wrote: Consider the following code snipet:: fricas (1) -> <spad> fricas )abbrev domain T T fricas Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/9110329210505148464-25px001.spad
using old system compiler.
T abbreviates domain T The SPAD compiler complains on the definition of decl with the message [click on + to expand compiler output] On Mon, 16 Oct 2006, Page, Bill wrote: Why would you consider the type T itself to be known in the scope where the value of Decl is computed? Gaby's Reply: Because inside the definition of T(), % is supposed to refer to the domain defined, i.e. T. Yes that is correct. But you are asking SPAD explicitly to evaluate
Gaby said: Notice that the only thing that is needed to be known is the type name. I think it is instructive to see what Aldor says about this construction:
Decl := Record(name: Symbol, type: T)
^
[L4 C1] #7 (Error) `Decl' is used in a type, so must be constant,
and so cannot be assigned to.
After correcting the definition, Aldor compiles this thing without complaint: aldor #pile #include "axiom" aldor Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1501044709281826201-25px002.as
using Aldor compiler and options
-O -Fasy -Fao -Flsp -lfricas -Mno-ALDOR_W_WillObsolete -DFriCAS -Y $FRICAS/algebra -I $FRICAS/algebra
Use the system command )set compiler args to change these
options.
"/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1501044709281826201-25px002.as",Even more exciting is the fact that using the spad )lisp (setq |$bootStrapMode| t) )abbrev domain T T spad Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/575440422302135301-25px003.spad
using old system compiler.
Your user access level is compiler and this command is therefore not
available. See the )set userlevel command for more information.
T abbreviates domain T
------------------------------------------------------------------------The same code which gives the above error: >> System error: Caught fatal error [memory may be damaged] works when compiled in a clean Axiom session. See [SandBoxBootStrap2]?. I wonder why Bill Page wrote: Perhaps you meant to write:
Decl := Record(name: Symbol, type: %)
Gaby asked: what would that % refers to? As far as I know, in SPAD the Type % is not resolved statically at compile time instead it remains a placeholder for "this domain" in whatever context it occurs. (In contrast to Aldor.) Bill Page claimed: which seems to compile as expected? Gaby: But, we don't know the compiler is right. Which is I'm asking. I don't know. Maybe you need to extend your example to actually do some computation which tests the semantics and/or take a look at the generated Lisp code. |