Ralf Hemmecke <r...@hemmecke.de> writes:

| Hi,
| 
| I'm used to parametrized macros. Are they available in SPAD?

There are available in OpenAxiom since version 1.4.0.

When I tried to compile your example, I got:

  ****** comp fails at level 2 with expression: ******
  error in function baz

  (+ (* 2 |x|) | << | (^ 3 |x|) | >> |)
  ****** level 2  ******
  $x:= (^ 3 x)
  $m := Integer

     >> Apparent user error:
     Cannot coerce x of mode Integer to mode NonNegativeInteger

| The following program seems to suggest NO, but it also seems to
| contain a bug, since it compiles with X which is nowhere defined.
| 
| ---rhxBEGIN tst.spad
| EXX ==> Expression X
| EX Y ==> Expression Y
| fooz z ==> 2*z+3^z
| 
| )abbrev category CATX CatX
| CatX(R: Ring): Category == with
|     foo: EXX -> Integer
| 
| )abbrev category CATY CatY
| CatY(R: Ring): Category == with
|     foo2: EX R -> Integer
| 
| )abbrev domain MINT MyInteger
| MyInteger: IntegerNumberSystem with
|     baz: Integer -> Integer
|  == Integer add
| --    fooz z ==> 2*z+3^z
|     baz(x: Integer): Integer == fooz x
| ---rhxEND tst.spad
| 
| Compilation aborts with the following message.
| 
|    MINT abbreviates domain MyInteger
| ------------------------------------------------------------------------
|    initializing NRLIB MINT for MyInteger
|    compiling into NRLIB MINT
|    compiling exported baz : Integer -> Integer
| ****** comp fails at level 1 with expression: ******
| error in function baz
| 
| ((|fooz| |x|))
| ****** level 1  ******
| $x:= (fooz x)
| $m:= (Integer)
| $f:=
| ((((|x| # #) (* #) (+ #) (- #) ...)))
| 
|    >> Apparent user error:
|    cannot compile (fooz x)
| 
| ==============================
| When "fooz z ==> 2*z+3^z" is mooved inside the "add" part of MINT, the
| error message is different. Why?
| 
| ****** comp fails at level 3 with expression: ******
| error in function baz
| 
| ((+ (* 2 | << z >> |) (^ 3 |z|)) |x|)
| ****** level 3  ******
| $x:= z
| $m:= $EmptyMode
| $f:=
| ((((|x| # #) (* #) (+ #) (- #) ...)))
| 
|    >> Apparent user error:
|    Cannot coerce 2
|       of mode (PositiveInteger)
|       to mode $
| 
| ==============================
| The compilation also shows
| 
| --->/home/hemmecke/p/tst.spad-->CatX((foo ((Integer) (Expression
| X)))): Not documented!!!!
| 
| --->/home/hemmecke/p/tst.spad-->CatY((foo2 ((Integer) (EX R)))): Not
| documented!!!!
| 
| for CatX and CatY respectively, i.e. EXX seems to have been expanded
| to Expression X, but EX R is left untouched and not expanded to
| Expression R.

OpenAxiom does not expand EXX and EX.

| Can I somehow get paremetrized macros like in Aldor? According to the
| Axiom book (Chapter 6.2) parametrized macros should be available, but
| I guess that only applies to the interpreter.

yes, the AXIOM book was describing the interpreter; OpenAxiom included
them in the compiler too.

-- Gaby

------------------------------------------------------------------------------
RSA(R) Conference 2012
Mar 27 - Feb 2
Save $400 by Jan. 27
Register now!
http://p.sf.net/sfu/rsa-sfdev2dev2
_______________________________________________
open-axiom-devel mailing list
open-axiom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open-axiom-devel

Reply via email to