The following Aldor code was given as an example by Ralf Hemmecke and added to the wiki by Martin Rubey. See the thread: http://lists.gnu.org/archive/html/axiom-developer/2006-07/msg00046.html fricas (1) -> )version aldor #include "fricas" define CatA: Category == with { } define CatB: Category == with { } define SomeCat: Category == with { CatA; CatB; } Dom: SomeCat == Integer add; A == Dom; B: CatA == Dom; H: CatA == Dom add; main1():List Record(expression:String, aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/2635879875939783572-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. Compiling Lisp source code from file ./2635879875939783572-25px002.lsp Issuing )library command for 2635879875939783572-25px002 Reading #P"/var/aw/var/LatexWiki/2635879875939783572-25px002.asy" You get... fricas main1() In particular, that "B has CatB?" is a bit surprising, isn't it? Bill Page replied: I think you are dealing here with two separate but related issues: 1) *static* typing, and 2) inheritance rules. All types in Aldor are static (or at least *nearly static*) meaning that they must be resolved during the compilation phase. aldor #include "fricas" aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/551345834211954051-25px004.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. Compiling Lisp source code from file ./551345834211954051-25px004.lsp Issuing )library command for 551345834211954051-25px004 Reading #P"/var/aw/var/LatexWiki/551345834211954051-25px004.asy" Try a little harder to create dynamic types: aldor #include "fricas" aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1438580684530002070-25px005.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. Compiling Lisp source code from file ./1438580684530002070-25px005.lsp Issuing )library command for 1438580684530002070-25px005 Reading #P"/var/aw/var/LatexWiki/1438580684530002070-25px005.asy" CatA is now explicitly exposed in frame initial fricas for i in 1..10 repeat output [n()$X1, Or this way: aldor #include "fricas" import from Integer; aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/5501580183423487024-25px007.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. Compiling Lisp source code from file ./5501580183423487024-25px007.lsp Issuing )library command for 5501580183423487024-25px007 Reading #P"/var/aw/var/LatexWiki/5501580183423487024-25px007.asy" fricas for i in 1..10 repeat output [n()$Y1, Or like this: aldor #include "fricas" import from Integer; define CatX: Category == with {foo: () -> Integer} A: CatX == add {foo(): Integer == 0;} B: CatX == add {foo(): Integer == 1;} Z: CatX == if odd? random(10) then A else B; aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/4475696461483594624-25px009.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. Compiling Lisp source code from file ./4475696461483594624-25px009.lsp Issuing )library command for 4475696461483594624-25px009 Reading #P"/var/aw/var/LatexWiki/4475696461483594624-25px009.asy" fricas for i in 1..10 repeat output foo()$Z Ralf Hemmecke asked: Why does the compiler reject the program without the "add" in line (*)? aldor #include "fricas" aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/731070323520525114-25px011.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. Compiling Lisp source code from file ./731070323520525114-25px011.lsp Issuing )library command for 731070323520525114-25px011 Reading #P"/var/aw/var/LatexWiki/731070323520525114-25px011.asy" CatA is already explicitly exposed in frame initial fricas main2() Christian Aistleitner provided this answer: I'd consider that a bug in comparison of exports. Replacing your (*) line by: X: CatX == if true then (A@CatX) else (B@CatX); gives a working program. aldor #include "fricas" aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/2725589955460952637-25px013.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. Compiling Lisp source code from file ./2725589955460952637-25px013.lsp Issuing )library command for 2725589955460952637-25px013 Reading #P"/var/aw/var/LatexWiki/2725589955460952637-25px013.asy" fricas main3() So the problem (wild guess) is that the compiler Has problems with seeing that the if statement gives CatX? in both branches of the if statement. Mainly because the types of A and B aro not equal. However, you can hint the compiler. My code is telling him "The if part gives CatX? and the else part gives CatX?". Then the compiler can infer, that the whole "if" statement gives CatX?. And it is at least the type of X (which is CatX?). So it matches. aldor #include "fricas" import from Integer; define CatA: Category == with; define CatB: Category == with; define CatX: Category == with; A: Join(CatX, aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/3499552379206056026-25px015.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. Compiling Lisp source code from file ./3499552379206056026-25px015.lsp Issuing )library command for 3499552379206056026-25px015 Reading #P"/var/aw/var/LatexWiki/3499552379206056026-25px015.asy" CatA is already explicitly exposed in frame initial fricas main4(0) In the following code we have the correspondence: A <--> B String <--> with "x" <--> String "y" <--> Integer aldor #include "fricas" define CatA(s: String): Category == with; A(s: String): CatA(s) == add; aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/4520573120428817379-25px017.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. Compiling Lisp source code from file ./4520573120428817379-25px017.lsp Issuing )library command for 4520573120428817379-25px017 Reading #P"/var/aw/var/LatexWiki/4520573120428817379-25px017.asy" CatA is already explicitly exposed in frame initial The interesting part is that the truth value of the second and fourth list elements do not agree. fricas rhxmain() An example of a domain-valued variable aldor #include "fricas" #pile aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/3633650021500177729-25px019.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. Compiling Lisp source code from file ./3633650021500177729-25px019.lsp Issuing )library command for 3633650021500177729-25px019 Reading #P"/var/aw/var/LatexWiki/3633650021500177729-25px019.asy" fricas main5(1)
Type: List(Boolean)
fricas main5(2)
Type: List(Boolean)
fricas )clear completely The compiler checks static types. aldor #include "fricas" #pile aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/7190335948694378273-25px021.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/7190335948694378273-25px021.as", But note that we cannot define domain-valued variables in the FriCAS interpreter. fricas x:IntegralDomain Try to write a self-describing domain --Bill Page, Wed, 26 Jul 2006 06:28:37 -0500 reply aldor #include "fricas" #pile aldor Compiling FriCAS source code from file /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/2501096951859201286-25px023.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. Compiling Lisp source code from file ./2501096951859201286-25px023.lsp Issuing )library command for 2501096951859201286-25px023 Reading #P"/var/aw/var/LatexWiki/2501096951859201286-25px023.asy" MyDom is now explicitly exposed in frame initial fricas )sh MyDom |