(DEFPROP FSTATM
(LAMBDA (RULE)
(PROG (A)
START(SETQ A (CAR RULE))
(COND ((NULL RULE) (RETURN @*))
((ZEROP A) (GO ON))
((ATOM A) (RETURN A)))
ON (SETQ RULE (CDR RULE))
(GO START)))
EXPR)
(DEFPROP SHELVE
(LAMBDA (PAIRS INST)
(PROG (A B C D)
START(SETQ INST (CDR INST))
(COND ((NULL INST) (RETURN SHELF)))
(SETQ A (CAR INST))
(SETQ B (CAR A))
(SETQ C (CADR A))
(SETQ D (CDDR A))
(COND ((EQ B @*P) (GO PR))
((EQ B @*D) (RETURN (SETDIS C (CAR D))))
((NEQ C @*) (GO GETD)))
(SETQ C (INDIRECT (CAR D) PAIRS))
(SETQ D (CDR D))
GETD (SETQ D (COMITRIN PAIRS D))
(SETQ A (GTSHLF C))
(COND ((EQ B @*S) (GO ST1))
((EQ B @*Q) (GO QU1))
((EQ B @*X) (GO EX)))
(PRINT (LIST @(SHELVING ERROR IN) (CAR INST)))
(GO START)
PR (COND ((EQ C @\) (RETURN (PRINT SHELF))))
PR1 (PRINT (LIST @SHELF C @CONTAINS (CAR (GTSHLF C))))
(COND ((NULL D) (GO START)))
(SETQ C (CAR D))
(SETQ D (CDR D))
(GO PR1)
EX (SETQ B (CAR A))
(RPLACA A WORKSPACE)
(SETQ WORKSPACE B)
(GO START)
QU1 (RPLACA A (COND ((CAR A) (NCONC (CAR A) D)) (D)))
(GO START)
ST1 (RPLACA A (APPEND D (CAR A)))
(GO START)))
EXPR)
(DEFPROP SETDIS
(LAMBDA (X Y)
(PROG (A)
(SETQ A (GTPAIR X DISPCH))
(COND ((NULL A) (SETQ DISPCH (CONS X (CONS Y DISPCH))))
(T (RPLACA A Y)))
(RETURN DISPCH)))
EXPR)
(DEFPROP GETDCT
(LAMBDA (X Y)
(PROG (A)
(COND ((NOT (ATOM X)) (RETURN (LIST X))))
(SETQ A (GET X Y))
(COND ((NULL A) (RETURN X)))
(RETURN A)))
EXPR)
(DEFPROP INDIRECT
(LAMBDA (X PAIRS) (GTNAME X PAIRS))
EXPR)
(DEFPROP COMITR
(LAMBDA (LEFT ORDER)
(PROG (A B C)
(SETQ A (GTNAME 0 LEFT))
(COND ((ZEROP A) (SETQ A NIL))
((NULL A) (GO ON))
((ATOM A) (SETQ A (LIST A))))
ON (SETQ B (GTNAME @WSEND LEFT))
(COND ((ZEROP ORDER) (SETQ C NIL))
(T (SETQ C (COMITRIN LEFT ORDER))))
(RETURN (APPEND A C B))))
EXPR)
(DEFPROP COMITRIN
(LAMBDA (LEFT ORDER)
(PROG (A B)
START(COND ((NULL ORDER) (RETURN A)))
(SETQ B (GTNAME (CAR ORDER) LEFT))
(COND ((NULL B) (GO ON)) ((ATOM B) (SETQ B (LIST B))))
(SETQ A (COND (A (NCONC A B)) (B)))
ON (SETQ ORDER (CDR ORDER))
(GO START)))
EXPR)
(DEFPROP GTNAME
(LAMBDA (NAME PRS)
(PROG (A B C)
((ATOM NAME) (GO START))
(SETQ C (CAR NAME))
(COND
((EQ C @FN)
(RETURN
(COPYTP
(APPLY (CADR NAME) (COMITRIN PRS (CDDR NAME)) NIL))))
((EQ C @*K) (RETURN (LIST (COMITRIN PRS (CDR NAME)))))
((EQ C @*C) (RETURN (COMPRESS (COMITRIN PRS (CDR NAME)))))
((EQ C @*) (RETURN (COPYTP (EVAL (CADR NAME)))))
((EQ C @*W) (RETURN (WRITES (COMITRIN PRS (CDR NAME)))))
((EQ C @*E) (RETURN (EXPAND (GTNAME (CADR NAME) PRS))))
((EQ C @*\) (RETURN (LIST (SBMERGE (CDR NAME)))))
((EQ C @*N) (RETURN (NEXT (CDR NAME))))
((EQ C @*R) (RETURN (MTREAD)))
((EQ (CADR NAME) @\)
(RETURN
(LIST
(SBMERGE (LIST @MERGE C (CONS @G99999 (CDR NAME)))))))
((EQ C @*F) (RETURN (CAAR (GTNAME (CADR NAME) PRS))))
((EQ C @*A) (RETURN (ALL (CDR NAME))))
((EQ C QUOTE) (RETURN (CADR NAME))))
START(COND ((NULL PRS) (RETURN NAME)))
(SETQ A (CAR PRS))
(COND ((EQUAL NAME (CAR A)) (RETURN (COPYTP (CDR A)))))
(SETQ PRS (CDR PRS))
(GO START)))
EXPR)
(DEFPROP MTREAD
(LAMBDA NIL
(PROG (A B)
(CLRBFI)
(SETQ A (NCONS))
A (SETQ B (READCH))
((EQ (CHRVAL B) 15) (RETURN (VCONC A)))
(TCONC A B)
(GO A)))
EXPR)
(DEFPROP ALL
(LAMBDA (X)
(PROG (A B)
(COND ((EQ (CAR X) @*) (SETQ X (INDIRECT (CADR X) PRS)))
(T (SETQ X (CAR X))))
(SETQ A (GTSHLF X))
(SETQ B (CAR A))
(RPLACA A NIL)
(RETURN B)))
EXPR)
(DEFPROP NEXT
(LAMBDA (X)
(PROG (A B C)
(COND ((EQ (CAR X) @*) (SETQ X (INDIRECT (CADR X) PRS)))
(T (SETQ X (CAR X))))
(SETQ A (GTSHLF X))
(SETQ C (CAR A))
(COND ((NULL C) (RETURN NIL)))
(SETQ B (CAR C))
(RPLACA A (CDR C))
(RETURN (LIST B))))
EXPR)
(DEFPROP GTSHLF
(LAMBDA (X)
(PROG (A)
(SETQ A (GTPAIR X SHELF))
(COND ((NULL A) (GO A)))
(RETURN A)
A (SETQ A (CONS NIL SHELF))
(SETQ SHELF (CONS X A))
(RETURN A)))
EXPR)
(DEFPROP SBMERGE
(LAMBDA (X)
(PROG (A B C D E G)
(SETQ A (CAR X))
(SETQ B (CADR X))
(COND ((EQ (AND (CONSP B) (CADR B)) @\) (GO BX)))
(SETQ B (GTNAME B PRS))
(COND ((NOT (ATOM B)) (SETQ B (CAR B))))
BX (SETQ C (CADDR X))
(COND ((EQ (CADR C) @\) (GO CX)))
(SETQ C (GTNAME C PRS))
(COND ((NOT (ATOM X)) (SETQ C (CAR C))))
CX (COND ((OR (ATOM C) (NOT (EQ (CADR C) @\))) (SETQ C NIL))
(T (SETQ C (CDDR C))))
(COND ((OR (ATOM B) (NOT (EQ (CADR B) @\))) (GO B)))
(SETQ D (LIST (CAR B) @\))
(SETQ B (CDDR B))
(GO D)
B (SETQ D (LIST B @\))
(SETQ B NIL)
D (SELECTQ A
(AND (GO AND))
(MERGE (GO AND))
(OR (GO OR))
(SUBST (GO SUBST))
NIL)
ERROR(PRINT @(SUBSCRIPT ERROR))
(PRINT X)
(RETURN (GTNAME (CADR X) PRS))
AND (COND ((NULL B) (GO RETURN))
((MEMBER (CAR B) C) (SETQ G (CONS (CAR B) G))))
(SETQ B (CDR B))
(GO AND)
OR (SETQ G C)
OR1 (COND ((NULL B) (GO RETURN))
((NOT (MEMBER (CAR B) G)) (SETQ G (CONS (CAR B) G))))
(SETQ B (CDR B))
(GO OR1)
SUBST(SETQ G C)
RETURN
(COND ((AND (EQ A @MERGE) (NULL G)) (SSETQ G C)))
(COND ((NULL G) (RETURN (CAR D))))
(RETURN (NCONC D G))))
EXPR)
(DEFPROP COMITMATCH
(LAMBDA (RULE WORKSPACE)
(PROG (A B)
(SETQ A (CMATCH (NAMER RULE) WORKSPACE NIL))
(COND ((NULL A) (RETURN NIL)) ((EQ A @$IMP) (RETURN NIL)))
(SETQ B (CONS @WSEND (CDR A)))
(RETURN (ADDLAST (CAR A) B))))
EXPR)
(DEFPROP CMATCH
(LAMBDA (RULE WORKSPACE MPAIRS)
(PROG (RNAME A B C D E G H)
(SETQ RNAME (CAR RULE))
(SETQ RULE (CDR RULE))
(SETQ B (CAR RULE))
(COND ((NULL RULE) (RETURN (CONS MPAIRS WORKSPACE)))
((EQ B @$0) (GO $0))
((EQ B @$) (GO PDOLL)))
(SETQ H (AND (CONSP B) (CAR B)))
(COND ((EQ H @*P) (GO PRINT))
((EQ H @FN) (GO FN))
((NULL WORKSPACE) (RETURN @$IMP)))
(SETQ G 0)
(COND ((EQ B @$1) (SETQ G 1))
((EQ B @$2) (SETQ G 2))
((EQ B @$3) (SETQ G 3)))
(COND ((NOT (ZEROP G)) (GO NDOLL2)))
(GO TEST)
$0 (COND
((AND (NOT (NULL WORKSPACE)) (NULL (CDR RULE))) (SETQ B NIL))
(T (SETQ B (CONS NIL WORKSPACE))))
(GO WATB)
TEST (COND ((EQ H @$) (GO NDOLL))
((EQ H @*) (GO EVAL))
((EQ H QUOTE) (GO ATB1))
(T (GO ATB)))
FN (SETQ B (CDR B))
(SETQ E (CONS WORKSPACE (COMITRIN MPAIRS (CDR B))))
(SETQ B (COPYTP (APPLY (CAR B) E NIL)))
WATB (COND
((NULL B) (RETURN NIL))
((EQ B @$IMP) (RETURN B))
(T
(RETURN
(CMATCH (CONS (CDR RNAME) (CDR RULE))
(CDR B)
(ADDLAST MPAIRS (CONS (CAR RNAME) (CAR B)))))))
PDOLL(SETQ D (CDR RNAME))
(SETQ RULE (CDR RULE))
(COND
((NULL RULE)
(RETURN
(LIST (ADDLAST MPAIRS (CONS (CAR RNAME) WORKSPACE))))))
DLOOP(SETQ B (CMATCH (CONS D RULE) WORKSPACE MPAIRS))
(COND
((NULL WORKSPACE) (RETURN NIL))
((EQ B @$IMP) (RETURN B))
(B
(RETURN
(CONS (ADDLAST (CAR B) (CONS (CAR RNAME) C)) (CDR B)))))
(SETQ C (ADDLAST C (CAR WORKSPACE)))
(SETQ WORKSPACE (CDR WORKSPACE))
(GO DLOOP)
SUBMCH
(SETQ B (SUBMCH B WORKSPACE))
(GO WATB)
PRINT(PRINT (CDR B))
(PRINT WORKSPACE)
$IMP (RETURN @$IMP)
EVAL (SETQ B (EVAL (CADR B)))
(GO ATB2)
ATB1 (SETQ B (CADR B))
(GO ATB2)
ATB (COND ((ATOM B) (SETQ B (GTNAME B MPAIRS))))
ATB2 (SETQ H (CAR WORKSPACE))
(COND ((ATOM B) (GO B))
((EQ (CADR B) @\) (GO SUBMCH))
((EQUAL B H) (SETQ B (CONS (LIST B) (CDR WORKSPACE))))
(T (SETQ B NIL)))
(GO WATB)
B (COND
((EQUAL B H) (SETQ B WORKSPACE))
((AND (EQUAL B (AND (CONSP H) (CAR H))) (EQ (CADR H) @\))
(SETQ B (CONS (LIST H) (CDR WORKSPACE))))
(T (SETQ B NIL)))
(GO WATB)
NDOLL(SETQ G (CADR B))
NDOLL2
(SETQ B (DOLNN G WORKSPACE))
(GO WATB)))
EXPR)
(DEFPROP NAMER
(LAMBDA (X)
(PROG (A B C D E)
(SETQ A (CAR X))
(SETQ D 1)
(SETQ B X)
(COND ((OR (EQ A @$) (EQ A @$0)) (GO START)))
(SETQ B (CONS @$ X))
(SETQ E (LIST 0))
START(COND ((NULL X) (RETURN (CONS E B))))
(SETQ E (ADDLAST E D))
(SETQ X (CDR X))
(SETQ D (ADD1 D))
(GO START)))
EXPR)
(DEFPROP SUBMCH
(LAMBDA (X Y)
(PROG (A B C)
(SETQ A (CAR X))
(SETQ B (CAR Y))
(COND
((NOT
(OR (EQ A @$1)
(EQUAL A (AND (CONSP B) (CAR B)))
(EQUAL A @($ 1))))
(RETURN NIL)))
(COND ((EQ (CADR B) @\) (GO ON)) (T (RETURN NIL)))
ON (SETQ A (CDR X))
(COND ((EQ (CAR A) @\) (GO A)))
(PRINT (LIST @(SUBSCRIPT ERROR SUBMCH) X))
(RETURN NIL)
A (SETQ A (CDR A))
(SETQ C (CDDR B))
START(COND ((NULL A) (RETURN (CONS (LIST B) (CDR Y))))
((MEMBER (CAR A) C) (SETQ A (CDR A)))
(T (RETURN NIL)))
(GO START)))
EXPR)
(DEFPROP DOLNN
(LAMBDA (NUM WSPACE)
(PROG (A B)
(SETQ B (CAR WSPACE))
(COND ((NUMBERP NUM) (GO NUM))
((EQ NUM @NUMBER) (GO NUMBER))
((EQ NUM ATOM) (GO ATOM))
((EQ NUM LIST) (GO LIST)))
(COND ((OR (EQUAL NUM B) (EQUAL NUM (CAR B))) (GO RNIL)))
$1 (COND ((ATOM B) (GO B)))
LST (RETURN (CONS (LIST B) (CDR WSPACE)))
NUMBER
(COND ((NOT (NUMBERP B)) (GO RNIL)))
B (RETURN WSPACE)
ATOM (COND ((ATOM B) (GO B)))
RNIL (RETURN NIL)
LIST (COND ((ATOM B) (GO RNIL)) (T (GO LST)))
NUM (COND ((ONEP NUM) (GO $1)))
START(COND ((ZEROP NUM) (RETURN (CONS A WSPACE)))
((NULL WSPACE) (RETURN @$IMP)))
(SETQ A (ADDLAST A (CAR WSPACE)))
(SETQ WSPACE (CDR WSPACE))
(SETQ NUM (SUB1 NUM))
(GO START)))
EXPR)
(DEFPROP ADDLAST
(LAMBDA (X Y) (APPEND X (LIST Y)))
EXPR)
(DEFPROP WRITES
(LAMBDA (X)
(PROG (A)
START(SETQ A (CAR X))
(COND ((NULL X) (RETURN NIL))
((EQ A @$EOR$) (GO ON))
((ATOM A) (PRIN1 A))
(T (PRIN1 @***)))
(SETQ X (CDR X))
(GO START)
ON (TERPRI)
(RETURN NIL)))
EXPR)