login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Aldor has generators:

http://www.aldor.org/docs/HTML/chap9.html
In fact, this form of using generators is so common, that if the expression E in for v in E. does not belong to a generator type, then an implicit call is made to an appropriate generator function. This is equivalent to writing for v in generator E.

The Aldor/Axiom interface provides such a generator for the Axiom Vector type. Let's try it.

More space? I am not sure why but it seems that I must increase GCL memory allocation to make this work.

axiom
)lisp (si::allocate-contiguous-pages 1500 t)
>> System error: SB-INT:SIMPLE-READER-PACKAGE-ERROR at 31 (line 1, column 31) on #<SB- IMPL::STRING-INPUT-STREAM {1004724AE1}>: package "SI" not found

aldor
#include "axiom"
myList(v:Vector Integer):List Integer == [ i for i in v ];
aldor
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/4218486668628728926-25px002.as using 
      AXIOM-XL compiler and options 
-O -Fasy -Fao -Flsp -laxiom -Mno-ALDOR_W_WillObsolete -DAxiom -Y $AXIOM/algebra -I $AXIOM/algebra
      Use the system command )set compiler args to change these 
      options.
   Compiling Lisp source code from file 
      ./4218486668628728926-25px002.lsp
   Issuing )library command for 4218486668628728926-25px002
   Reading /var/zope2/var/LatexWiki/4218486668628728926-25px002.asy

axiom
V:Vector Integer:=[1,2,3]

\label{eq1}\left[ 1, \: 2, \: 3 \right](1)
Type: Vector(Integer)
axiom
myList(V)

\label{eq2}\left[ 1, \: 2, \: 3 \right](2)
Type: List(Integer)

Space left?

axiom
)lisp (room)
Dynamic space usage is: 96,887,968 bytes. Read-only space usage is: 5,200 bytes. Static space usage is: 3,088 bytes. Control stack usage is: 3,184 bytes. Binding stack usage is: 832 bytes. Garbage collection is currently enabled.
Breakdown for dynamic space: 34,263,344 bytes for 2,141,459 cons objects. 21,579,408 bytes for 21,204 code objects. 14,091,792 bytes for 119,368 simple-vector objects. 11,835,984 bytes for 134,382 instance objects. 15,171,264 bytes for 304,865 other objects. 96,941,792 bytes for 2,721,278 dynamic objects (space total.) Value = NIL

Re: aldor stream oddities --Bill Page, Thu, 09 Aug 2007 10:53:09 -0500 reply
On Aug 9, 2007 10:07 AM Franz Lehner wrote:

Hello,

is there a way to get hold of generate$Stream using the aldor compiler? I spent quite some time until figuring out that generate is probably a keyword in aldor (I could not check as the aldor site seems to be down) and this causes strange error messages. The following two snippets do not work, note that the second leads to a segfault:

  =================================================
  #include "axiom"

  teststream: with {
         zerostream:()->Stream Integer;
  } == add {
         zerostream():Stream Integer == {
                 import from Integer;
                 generate((x:Integer):Integer +-> 0@Integer,0@Integer);
  }
  }
  =================================================
  aldor -Fasy -Fao -Flsp  -laxiom -DAxiom -Y/home/lehner/usr/local/lib/wh-sandbox_s1/target/x86_64-unknown-linux/algebra test1.as "test1.as", line 8:
                   generate((x:Integer):Integer +-> 0@Integer,0@Integer);
  .........................^
  [L8 C26] #1 (Error) Have determined 1 possible types for the expression.
           Meaning 1: (x: Integer) -> Integer, Integer
     The context requires an expression of type Stream(Integer).

  make: *** [test.ao] Fehler 1

  =========================================================
  #include "axiom"

  teststream: with {
         zerostream:()->Stream Integer;
  } == add {
         zerostream():Stream Integer == {
                 import from Integer;
                 generate(():Integer +-> 0@Integer);
  }
  }
  =========================================================
  aldor -Fasy -Fao -Flsp  -laxiom -DAxiom -Y/home/lehner/usr/local/lib/wh-sandbox_s1/target/x86_64-unknown-linux/algebra est2.as
  Program fault (segmentation violation).#3 (Error) Program fault
  (segmentation violation).
  "test2.as", line 6:         zerostream():Stream Integer == {
                      .......................................^
  [L6 C40] #1 (Error) Have determined 0 possible types for the expression.
     Subexpression `import from Integer':
           Meaning 1: (0 types)

  "test.as", line 9:                 generate(():Integer +-> 0@Integer);
                      .........................^
  [L9 C26] #2 (Error) Have determined 0 possible types for the expression.

  make: *** [test.ao] Fehler 1

Bill Page replied:

Here is one way. The important thing is to escape the keyword generator by prefix with _.

aldor
#include "axiom"
teststream: with { zerostream:()->Stream Integer; } == add { zerostream():Stream Integer == { import from Integer; _generate((x:Integer):Integer +-> 0@Integer,0@Integer); } }
aldor
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/5904224867308724363-25px005.as using 
      AXIOM-XL compiler and options 
-O -Fasy -Fao -Flsp -laxiom -Mno-ALDOR_W_WillObsolete -DAxiom -Y $AXIOM/algebra -I $AXIOM/algebra
      Use the system command )set compiler args to change these 
      options.
   Compiling Lisp source code from file 
      ./5904224867308724363-25px005.lsp
   Issuing )library command for 5904224867308724363-25px005
   Reading /var/zope2/var/LatexWiki/5904224867308724363-25px005.asy
   teststream is now explicitly exposed in frame initial 
   teststream will be automatically loaded when needed from 
      /var/zope2/var/LatexWiki/5904224867308724363-25px005

axiom
zerostream()

\label{eq3}\left[ 0, \: 0, \: 0, \: 0, \: 0, \: 0, \: 0, \: 0, \: 0, \: 0, \: \ldots \right](3)
Type: Stream(Integer)




  Subject:   Be Bold !!
  ( 7 subscribers )  
Please rate this page: