perm filename LC0.BB[206,LSP] blob sn#260925 filedate 1977-02-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002
C00011 ENDMK
C⊗;

.BEGIN NOFILL
.VARIABLE CHW
.CHW ← CHARW
.TURN OFF "βα#\←∞↑↓∪"
.TURN ON "∂{%"
.TURN ON "/" FOR "α"
.AT "∂∂(" CH ")" ⊂ CHARW←CH}∂(2){CHARW←CHW ⊃


∂∂(48)%2compl %2file (FEXPR) ← 
∂∂(80)%3prog [%2z]
∂∂(153)%2eval OUTPUT . [ `DSK:'  . <%3a %2file . LAP>]
∂∂(153)%2eval INPUT . [ `DSK:'  . %2file]
∂∂(153)%2inc[T, NIL]
∂∂(153)%2outc[T, NIL]
∂∂(91)%2loop %2z ← %2errset %2read[]
∂∂(153)%3if %3at %2z %3then %2go %2done %3else if T %3then NIL
∂∂(153)%2z ← %3a %2z
∂∂(153)%3if %3a %2z %3eq DE %3then 
∂∂(185)[%3prog [%2prog]
∂∂(267)%2prog ← %2comp[%3ad %2z, %3add %2z, %3addd %2z]
∂∂(267)%2mapc[%2print, %2prog]
∂∂(267)%2outc[NIL, NIL]
∂∂(267)%2print <%3ad %2z, %2length %2prog>
∂∂(267)%2outc[T, NIL]]
∂∂(169)%3else %2print %2z
∂∂(153)%2go %2loop
∂∂(85)%2done %2outc[NIL, T]
∂∂(153)%2inc[NIL, T]
∂∂(153)%2return ENDCOMP



∂∂(48)%2comp[%2fn, %2vars, %2exp] ← 
∂∂(80)/{%2length %2vars}[λ%2n. 
∂∂(112)<<LAP, %2fn, SUBR>>
∂∂(112)* %2mkpush[%2n, 1]
∂∂(112)* %2compexp[%2exp, -%2n, %2prup[%2vars, 1]]
∂∂(112)* <<SUB, P, <C, %2n, 0, %2n, 0>>>
∂∂(112)* ((POPJ P) NIL)]



∂∂(48)%2prup[%2vars, %2n] ← %3if %3n %2vars %3then NIL %3else [%3a %2vars . %2n] . %2prup[%3d %2vars, %2n + 1]



∂∂(48)%2mkpush[%2n, %2m] ← %3if %2n < %2m %3then NIL %3else <PUSH, P, %2m> . %2mkpush[%2n, %2m + 1]



∂∂(48)%2compexp[%2exp, %2m, %2vpr] ← 
∂∂(80)%3if %3n %2exp %3then ((MOVEI 1 0))
∂∂(80)%3else if %2exp %3eq T %3then ((MOVEI 1 (QUOTE T)))
∂∂(80)%3else if %3at %2exp %3then <<MOVE, 1, %2m + %3d %2assoc[%2exp, %2vpr], P>>
∂∂(80)%3else if %3a %2exp %3eq AND ∨ %3a %2exp %3eq OR ∨ %3a %2exp %3eq NOT %3then 
∂∂(112)/{%2gensym[], %2gensym[]}[λ%2l1, %2l2. 
∂∂(144)%2combool[%2exp, %2m, %2l1, NIL, %2vpr]
∂∂(144)* <(MOVEI 1 (QUOTE T)), <JRST, 0, %2l2>, %2l1, (MOVEI 1 0), %2l2>]
∂∂(80)%3else if %3a %2exp %3eq COND %3then %2comcond[%3d %2exp, %2m, %2gensym[], %2vpr]
∂∂(80)%3else if %3a %2exp %3eq QUOTE %3then <<MOVEI, 1, %2exp>>
∂∂(80)%3else if %3at %3a %2exp %3then 
∂∂(112)/{%2length %3d %2exp}[λ%2n. 
∂∂(144)%2complis[%3d %2exp, %2m, %2vpr]
∂∂(144)* %2loadac[1 - %2n, 1]
∂∂(144)* <<SUB, P, <C, %2n, 0, %2n, 0>>>
∂∂(144)* <<CALL, %2n, <E, %3a %2exp>, S>>]
∂∂(80)%3else if %3aa %2exp %3eq LAMBDA %3then 
∂∂(112)/{%2length %3d %2exp}[λ%2n. 
∂∂(144)%2complis[%3d %2exp, %2m, %2vpr]
∂∂(144)* %2compexp[%3adda %2exp, %2m - %2n, %2prup[%3ada %2exp, 1 - %2m] * %2vpr]
∂∂(144)* <<SUB, P, <C, %2n, 0, %2n, 0>>>]
∂∂(80)%3else if T %3then NIL



∂∂(48)%2complis[%2u, %2m, %2vpr] ← 
∂∂(80)%3if %3n %2u %3then NIL %3else %2compexp[%3a %2u, %2m, %2vpr] * ((PUSH P 1)) * %2complis[%3d %2u, %2m - 1, %2vpr]



∂∂(48)%2loadac[%2n, %2k] ← %3if %2n > 0 %3then NIL %3else <MOVE, %2k, %2n, P> . %2loadac[%2n + 1, %2k + 1]



∂∂(48)%2comcond[%2u, %2m, %2l, %2vpr] ← 
∂∂(80)%3if %3n %2u %3then <%2l>
∂∂(80)%3else /{%2gensym[]}[λ%2l1. 
∂∂(112)%2combool[%3aa %2u, %2m, %2l1, NIL, %2vpr]
∂∂(112)* %2compexp[%3ada %2u, %2m, %2vpr]
∂∂(112)* <<JRST, %2l>, %2l1>
∂∂(112)* %2comcond[%3d %2u, %2m, %2l, %2vpr]]



∂∂(48)%2combool[%2p, %2m, %2l, %2flg, %2vpr] ← 
∂∂(80)%3if %3at %2p %3then [%2compexp[%2p, %2m, %2vpr] * <<%3if %2flg %3then JUMPN %3else JUMPE, 1, %2l>>]
∂∂(80)%3else if %3a %2p %3eq AND %3then 
∂∂(112)[%3if ¬%2flg %3then %2compandor[%3d %2p, %2m, %2l, NIL, %2vpr]
∂∂(121)%3else /{%2gensym[]}[λ%2l1. %2compandor[%3d %2p, %2m, %2l1, NIL, %2vpr] * <<JRST, 0, %2l>> * <%2l1>]]
∂∂(80)%3else if %3a %2p %3eq OR %3then 
∂∂(112)[%3if %2flg %3then %2compandor[%3d %2p, %2m, %2l, T, %2vpr]
∂∂(121)%3else /{%2gensym[]}[λ%2l1. %2compandor[%3d %2p, %2m, %2l1, T, %2vpr] * <<JRST, 0, %2l>> * <%2l1>]]
∂∂(80)%3else if %3a %2p %3eq NOT %3then %2combool[%3ad %2p, %2m, %2l, ¬%2flg, %2vpr]
∂∂(80)%3else %2compexp[%2p, %2m, %2vpr] * <<%3if %2flg %3then JUMPN %3else JUMPE, 1, %2l>>



∂∂(48)%2compandor[%2u, %2m, %2l, %2flg, %2vpr] ← 
∂∂(80)%3if %3n %2u %3then NIL %3else %2combool[%3a %2u, %2m, %2l, %2flg, %2vpr] * %2compandor[%3d %2u, %2m, %2l, %2flg, %2vpr]

.END