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 initialfricas )sh MyDom |