home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol166 / evalcom.rec < prev    next >
Encoding:
Text File  |  1984-04-29  |  2.5 KB  |  84 lines

  1.  
  2. [EVALCOM.REC]
  3. [a compiler analogous to EVAL]
  4. [compiles LISP into REC without ALIST]
  5. [January 1, 1981]
  6.  
  7. [[]]
  8.  
  9.  {
  10.     [cr,lf]            (2573TL;)&
  11.     [console input]        (R13%='';T08%(=2080[sp,bs]TL)(@#|;L@#;);)#
  12.     [logon message]        ('
  13. Type a LISP function - use round parentheses.
  14. 'TL@&;)!
  15.     [bal paren]            (A')'E;'('E@+::)+
  16.     [next element]        (A'('E@+JA;j' 'U;')'U;)-
  17.     [enclose in quotes]        (JZD39%II39%IJQ;)%
  18.     [car]            (JZDI@-Q;)1
  19.     [cdr]            (JZDI@-D(' 'ED;;)JZQ;)2
  20.     [cons]            (JZD('()'='('II')'I;IAjI' 'I;)JZQ;)3
  21.     [atom]            (JZDI'('E'F';'T';)4
  22.     [eq]            (='T';L'F';)5
  23.     [null]            ('()'='T';L'F';)6
  24.     [read]            (@&'read> 'TL(@#;:);)7
  25.     [print]            (@&'      'TLT;)8
  26.     [append]            (JZDIjIzABBD' 'IJZQ;)9
  27.     [not]            ('T'='F';'F'='T';;)0
  28.                 
  29. [ASSOC]
  30. (1$rmml1$S0$rmml0$S(1$ryG@6'T'=0$ryG;L0$ryG1$ryG@1@5'T'=1$ryG@2@1;L'T''T'=0$ryG1$ryG@2@2@a;L;)nLn0$SnLn1$S ;)a
  31.  
  32.  
  33. [EVALCOM]
  34. (1$rmml1$S(1$ryG@4'T'=1$ryG"($ryG)"@3;L1$ryG@1"quote"@5'T'=1$ryG@2@1@%'()'@3;L1$ryG@1@4'T'=1$ryG@11$ryG@2@v@d;L1$ryG@1@1"lambda"@5'T'=1$ryG@2@v1$ryG@1@2@11$ryG@1@2@2@1@c@m;L;)nLn1$S ;)c
  35.  
  36.  
  37. (2$rmml2$S1$rmml1$S(1$ryG"if"@5'T'=2$ryG@1"('T'=)"2$ryG@2@1"(;L)"2$ryG@2@2@1"(;)"'()'@3@3@3@3@3@3@p;L1$ryG"list"@5'T'=2$ryG@l;L1$ryG"and"@5'T'=2$ryG@n'()'@3;L1$ryG"or"@5'T'=2$ryG@o'()'@3;L'T''T'=@e;L;)nLn1$SnLn2$S ;)d
  38.  
  39.  
  40. [primitive atomic function forms]
  41. ((1$ryG"car"@5'T'=2$ryG@1"(@1)"@9;L1$ryG"cdr"@5'T'=2$ryG@1"(@2)"@9;L1$ryG"cons"@5'T'=2$ryG@12$ryG@2@1"(@3)"@9@9;L1$ryG"atom"@5'T'=2$ryG@1"(@4)"@9;L1$ryG"eq"@5'T'=2$ryG@12$ryG@2@1"(@5)"@9@9;L'T''T'=@f;L;) ;)e
  42.  
  43.  
  44. ((0$ryG"not"@5'T'=1$ryG@12$ryG@e@0;L0$ryG"append"@5'T'=1$ryG@12$ryG@e1$ryG@2@12$ryG@e@9;L0$ryG"cond"@5'T'=1$ryG@m;L'T''T'=@h;L;) ;)f
  45.  
  46.  
  47. [COMLIS - compile the function LIST]
  48. (1$rmml1$S(1$ryG@6'T'="(' () ')";L1$ryG@11$ryG@2@l"(@3)"'()'@3@3@3@p;)nLn1$S ;)l
  49.  
  50.  
  51. [COMLAM compile a LAMBDA]
  52. (2$rmml2$S1$rmml1$S0$rmml0$S0$ryG1$ryG@s2$ryG1$ryG@r'()'@3@3@3@9@pnLn0$SnLn1$SnLn2$S ;)m
  53.  
  54.  
  55. [COMAND]
  56. (1$rmml1$S(1$ryG@6'T'="('T';;)";L1$ryG@1"('T'=)"1$ryG@2@n'()'@3@3@3@p;)nLn1$S ;)n
  57.  
  58.  
  59. [EVOR - evaluate an OR]
  60. (1$rmml1$S(1$ryG@6'T'="('F';)";L1$ryG@1"('T'='T';L)"1$ryG@2@o'()'@3@3@3@p;)nLn1$S ;)o
  61.  
  62.  
  63. [multiple APPEND]
  64. (1$rmml1$S(1$ryG@6'T'=1$ryG;L1$ryG@11$ryG@2@p@9;)nLn1$S ;)p
  65.  
  66. [restore]
  67. (1$rmml1$S(1$ryG@6'T'=1$ryG;L"(nLnn$S)"1$ryG@2@r@9;)nLn1$S ;)r
  68.  
  69.  
  70. [save]
  71. (1$rmml1$S(1$ryG@6'T'=1$ryG;L1$ryG@1"pGm$rmml"1$ryG@1"$S"'()'@3@3@3@31$ryG@2@s@9;)nLn1$S ;)s
  72.  
  73.  
  74. [EVLIST - compile all the elements of a list]
  75. (1$rmml1$S(1$ryG@6'T'=1$ryG;L1$ryG@1@c1$ryG@2@v@3;)nLn1$S ;)v
  76.  
  77.  
  78. [main program]
  79. (0$rmml0$S0$ryG@cnLn0$S ;)*
  80.  
  81. (@!@7@*@8;;)}
  82.  
  83. [end]
  84.