[LISCO.REC] [Post production scheme to compile LISP into REC] [20 December 1980] [[]] [many spaces are redundant] { [cr, lf] (2573TL;)& [read console] (R13%='';T08%(=2080[sp,bs]TL)(@J|;L@J;);)J [logon message] (' Type a LISP function using {}`s rather than ()`s, and enclosing the whole function within *...|. End the line with a carriage return. Use lower case. For example: *{car {cdr {quote {1 2 3 4 5}}}}| Each new keystroke will show another step of compilation. 'TL@&'Initial Axiom:'TL@&@JI;:)R [to shorten program] (UQzml;)U [write workspace] (JZqt;)W [to shorten program] (zZQml;)Z [signoff message] (@&'Theorem:'TL@&JZqt;)X (@R(@&@WRL JZ''E' '@U0$S(' 'E@Z1$S( JZD''I0$ryGI' 'I1$ryGI''I;)nL;nL)nL: JZ''E'{ '@U0$S('{ 'E@Z1$S( JZD''I0$ryGI'{'I1$ryGI''I;)nL;nL)nL: JZ''E' }'@U0$S(' }'E@Z1$S( JZD''I0$ryGI'}'I1$ryGI''I;)nL;nL)nL: JZ''E'{ }'@U0$S('{ }'E@Z1$S( JZD''I0$ryGI'{}'I1$ryGI''I;)nL;nL)nL: JZ' 'E@Z0$S( JZD''I0$ryGI''I;)nL: [others are essential] JZ''E'*'@U0$S('*'E'{'@U1$S('{'E@Z2$S( JZD''I0$ryGI''I1$ryGI' {*'I2$ryGI''I;)nL;nL)nL;nL)nL: JZ''E'%'@U0$S('%'E'}'@U1$S('}'E@Z2$S( JZD''I0$ryGI''I1$ryGI'} %'I2$ryGI''I;)nL;nL)nL;nL)nL: JZ''E'*'@U0$S('*'E@Z1$S( JZD'%'I0$ryGI''I1$ryGI''I;)nL;nL)nL: JZ''E'%'@U0$S('%'E@Z1$S( JZD'#'I0$ryGI''I1$ryGI''I;)nL;nL)nL: [isolate balancing parentheses] JZ''E':{'@U0$S(':{'E'{'@U1$S('{'E'}:'@U2$S('}:'E@Z3$S( JZD''I0$ryGI'{'I1$ryGI':{'I2$ryGI'}:'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ''E'#:{'@U0$S('#:{'E'}:'@U1$S('}:'E@Z2$S( JZD''I0$ryGI'!'I1$ryGI'!'I2$ryGI''I;)nL;nL)nL;nL)nL: JZ''E':{'@U0$S(':{'E'}:'@U1$S('}:'E@Z2$S( JZD''I0$ryGI'['I1$ryGI']'I2$ryGI''I;)nL;nL)nL;nL)nL: JZ''E'#{'@U0$S('#{'E'}'@U1$S('}'E@Z2$S( JZD''I0$ryGI'#:{'I1$ryGI'}:'I2$ryGI''I;)nL;nL)nL;nL)nL: JZ''E'['@U0$S('['E@Z1$S( JZD''I0$ryGI'{'I1$ryGI''I;)nL;nL)nL: JZ''E']'@U0$S(']'E@Z1$S( JZD''I0$ryGI'}'I1$ryGI''I;)nL;nL)nL: JZ''E'#'@U0$S('#'E@Z1$S( JZD''I0$ryGI''I1$ryGI''I;)nL;nL)nL: [separate elements of top level] JZ''E'&'@U0$S('&'E'!'@U1$S('!'E'!'@U2$S('!'E@Z3$S( JZD''I0$ryGI''I1$ryGI'!'I2$ryGI'!&'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ''E'&'@U0$S('&'E'{'@U1$S('{'E'!'@U2$S('!'E@Z3$S( JZD''I0$ryGI'&'I1$ryGI'#{'I2$ryGI'!'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ''E'&'@U0$S('&'E@Z1$S( JZD''I0$ryGI''I1$ryGI''I;)nL;nL)nL: [put markers between top level elements] JZ''E'~!'@U0$S('~!'E'!'@U1$S('!'E'!'@U2$S('!'E@Z3$S( JZD''I0$ryGI'^!'I1$ryGI'!^~'I2$ryGI'!'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ''E'~ '@U0$S('~ 'E@Z1$S( JZD''I0$ryGI'~'I1$ryGI''I;)nL;nL)nL: JZ''E'~'@U0$S('~'E' '@U1$S(' 'E'!'@U2$S('!'E@Z3$S( JZD''I0$ryGI'^'I1$ryGI'^~'I2$ryGI'!'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ''E'~!'@U0$S('~!'E@Z3$S( JZD''I0$ryGI'!'I3$ryGI''I;)nL;nL)nL: JZ''E'~'@U0$S('~'E'!'@U1$S('!'E@Z3$S( JZD''I0$ryGI'^'I1$ryGI'^!'I3$ryGI''I;)nL;nL)nL;nL)nL: [auxiliary cursors] JZ''E'?r!'@U0$S('?r!'E@Z1$S( JZD''I0$ryGI''I1$ryGI''I;)nL;nL)nL: JZ''E'?s!'@U0$S('?s!'E@Z1$S( JZD''I0$ryGI''I1$ryGI''I;)nL;nL)nL: JZ''E'?r'@U0$S('?r'E' '@U1$S(' 'E'!'@U2$S('!'E@Z3$S( JZD''I0$ryGI'nLn'I1$ryGI'$S?r'I2$ryGI'!'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ''E'?s'@U0$S('?s'E' '@U1$S(' 'E'!'@U2$S('!'E@Z3$S( JZD''I0$ryGI''I1$ryGI'$rmml'I1$ryGI'$S?s'I2$ryGI'!'I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: [always be sure that EVAL gets a balanced expression] JZ'{'E'|'@U1$S('|'E@Z2$S( JZD'#{'I1$ryGI'|'I2$ryGI''I;)nL;nL)nL: [EVAL: compile the primitive LISP forms] JZ'!{lambda 'E'!'@U1$S('!'E@Z2$S( JZD'!#{lambda 'I1$ryGI'!'I2$ryGI''I;)nL;nL)nL: JZ'!!lambda {'E'}'@U1$S('}'E'!'@U2$S('!'E'!'@U3$S('!'E'|'@U4$S('|'E@Z5$S( JZD''I4$ryGI'{? ?r'I1$ryGI' !}'I2$ryGI'{? ?s'I1$ryGI' !}'I3$ryGI'|'I5$ryGI''I;)nL;nL)nL;nL)nL;nL)nL;nL)nL: JZ'!car 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I1$ryGI' 'I2$ryGI'|@0'I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!cdr 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I1$ryGI' 'I2$ryGI'|@1'I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!cons 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I1$ryGI' 'I2$ryGI'|@2'I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!atom 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I1$ryGI' 'I2$ryGI'|@3'I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!eq 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I1$ryGI' 'I2$ryGI'|@4'I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!quote 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I2$ryGI'|`'I1$ryGI'`'I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!if ^'E'^^'@U1$S('^^'E'^^'@U2$S('^^'E'^!'@U3$S('^!'E'|'@U4$S('|'E@Z5$S( JZD''I3$ryGI' {? ;L} 'I2$ryGI' {? `T`=} 'I1$ryGI' ?x 'I4$ryGI'|}'I5$ryGI''I;)nL;nL)nL;nL)nL;nL)nL;nL)nL: JZ'!if 'E'!'@U1$S('!'E@Z2$S( JZD'!if ~&'I1$ryGI'!'I2$ryGI''I;)nL;nL)nL: JZ'!? 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I2$ryGI'|'I1$ryGI''I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'!'E' '@U0$S(' 'E'!'@U1$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I1$ryGI' 'I2$ryGI'|@'I0$ryGI''I3$ryGI''I;)nL;nL)nL;nL)nL;nL)nL: JZ'!'E'!'@U0$S('!'E'|'@U2$S('|'E@Z3$S( JZD''I2$ryGI'|@'I0$ryGI''I3$ryGI''I;)nL;nL)nL;nL)nL: JZ'?x 'E'|'@U1$S('|'E@Z2$S( JZD''I1$ryGI'|{'I2$ryGI''I;)nL;nL)nL: JZ''E' '@U1$S(' 'E'|'@U2$S('|'E@Z3$S( JZD''I2$ryGI'|'I1$ryGI'$ryG'I3$ryGI''I;)nL;nL)nL;nL)nL: [close out the compilation] JZ'|'E@Z1$S( JZD'{'I1$ryGI'T;}'I;)nL:;)@X;)} [end]