Som parse tree (som v1.5)
list   
 .--.--
. . . .--/
 |  |  
A list is linked dot-pairs.  A dot-pair has two fields:
head.tail.  The head can be either a dot-pair or an atom. 
The tail is a pointer points to list or nil (end of list).  An
atom has two fields: type.value.   An atom is distinguishable
from a dot-pair because its type field has a small value (0..9), this
value is less than any pointer to dot-pair.  
Example of a list of A, B, C       (A B C)
atom :: 
oper.op   
gname.idx   lname.idx   string.str  
num.value
op ::   
        add sub mul div eq ne lt le gt ge
not band bor bxor mod shl shr 
        set vec mac fun call mx if ifelse
while for break array case sys
program ::
fun/mac definition    
(oper.fun/mac gname.idx e...)
for             
            (oper.for lv
ex0 ex0 ex)
while            
          (oper.while ex0 ex)
if            
           
    (oper.if ex0 ex)
ifelse            
          (oper.ifelse ex0 ex
ex)
case            
           (oper.case ex0 block)
assign            
         (oper.set var ex)
call/mx            
        (oper.call/mx gname.idx e...)
block            
          (oper.block e...)
syscall            
         (oper.sys num.value e...)
var :: 
        gname.idx  lname.idx
(oper.vec var ex)
Example
to
sort | i j =
  for i 0 maxdata-1
    for j 0
maxdata-2
      if
data[j+1] < data[j]
       
swap j j+1
(fun sort 
  (for #1 0 (- 20 1 )
    (for #2 0 (-
20 2 )
     
(if (< (vec data (+ #2 1 ))(vec data #2 ))
       
(call swap #2 (+ #2 1 )))))))
:
print x = syscall {1 x}
(mac print (sys 1 #1 ))
encoding
encoding of type (0..9)
  
   sp
0   oper 1   num 2   gname 3  
lname 4  * 5  string 6 
encoding of op
 mul
50    div 51    sub
52     add 53    set 54
 eq
55     band 56   bor
57     bxor 58   mod 59
 not
60    ne 61     lt
62      le 63     shl 64
 gt
65     ge 66     shr
67     mac 68    * 69 
 *
70      vec 71    mx
72      block 73  call 74
 fun
75    if 76     ifelse 77 
while 78  for 79
 break
80  array 81  case 82    *
83      sys 84
24 Feb 2005