;;; -*- Mode:LISP; Package:CGOL; Base:10 -*- (SPECIAL CIBASE TOKEN STRINGNUD SYNTAX-NEEDED DRBP FUN DENTYPE ISFUN SILENCE DEFBP IVARS WHENVAR RESULT BODY NUDL LEDL LBPL CNUD CLED CLBP LANGUAGE_ALIST ARITHMETIC_ALIST) (PROGN 'COMPILE (DEFUN (ADVANCE NUD) NIL (LIST (PROG2 NIL 'ADVANCE))) (DEFUN ADVANCE NIL (SETQ STRINGNUD NIL) (SETQ TOKEN (CGOLTOKEN)) TOKEN)) (DEFUN VERIFY (DEN) (COND (DEN (ADVANCE) DEN))) (PROGN 'COMPILE (DEFUN (NUDERR NUD) NIL (LIST (PROG2 NIL 'NUDERR))) (DEFUN NUDERR NIL (COND ((AND (GETDEN LBPL) (NULL (FUNBOUNDP TOKEN))) (CGOLERR (CAT TOKEN '| MISSING PRECEDING EXPRESSION|) 2. T)) (T ((LAMBDA (OP TP) (ADVANCE) (LIST 'LAMBDA NIL (LIST 'QUOTE (COND ((AND (FUNBOUNDP OP) (MEMBER TP '(9. 13. 32.)) (OR STRINGNUD (AND (GETDEN NUDL) (NOT (EQUAL TOKEN '|(|))) (NOT (GETDEN LBPL)))) (LIST OP (PARSE (OR (GET OP 'RBP) 25.)))) (T OP))))) TOKEN (CGOLTYIPEEK)))))) (PROGN 'COMPILE (DEFUN (FUNBOUNDP NUD) NIL (LIST (PROG2 NIL 'FUNBOUNDP) (PROG2 NIL (PARSE 25.)))) (DEFUN FUNBOUNDP (X) (AND (SYMBOLP X) (OR (GETL X '(SUBR FSUBR LSUBR EXPR FEXPR LEXPR MACRO *EXPR *FEXPR *LEXPR AUTOLOAD)) (FBOUNDP X))))) (PROGN 'COMPILE (DEFUN (LEDERR NUD) NIL (LIST (PROG2 NIL 'LEDERR))) (DEFUN LEDERR NIL (CGOLERR (CAT TOKEN '| IS NOT AN OPERATOR WITH A LEFT ARGUMENT|) 2. T))) (PROGN 'COMPILE (DEFUN (GETDEN NUD) NIL (LIST (PROG2 NIL 'GETDEN) (PROG2 NIL (PARSE 25.)))) (DEFUN GETDEN (INDL) (AND INDL (OR (GET TOKEN (CAR INDL)) (GETDEN (CDR INDL)))))) (PROGN 'COMPILE (DEFUN (NUD NUD) NIL (LIST (PROG2 NIL 'NUD))) (DEFUN NUD NIL (OR (VERIFY (OR STRINGNUD (COND ((NUMBERP TOKEN) (LIST 'LAMBDA NIL TOKEN)) (T (GETDEN NUDL))))) (NUDERR)))) (PROGN 'COMPILE (DEFUN (LED NUD) NIL (LIST (PROG2 NIL 'LED))) (DEFUN LED NIL (OR (VERIFY (GETDEN LEDL)) (LEDERR)))) (PROGN 'COMPILE (DEFUN (PARSE NUD) NIL (LIST (PROG2 NIL 'PARSE) (PROG2 NIL (PARSE 25.)))) (DEFUN PARSE (RBP) (DO ((TRANSLATION (FUNCALL (NUD)) (FUNCALL (LED) TRANSLATION))) ((NOT (LESSP RBP (OR (GETDEN LBPL) 0.))) TRANSLATION) NIL))) (PUTPROP ' (MINUS 1.) 'LBP) (DEFUN SPEAK (X) ((LAMBDA (LANG) (COND (LANG (SETQ LANG (CDR LANG))) (T (CGOLERR (CAT X '| is an unknown language|) 3. T))) (SETQ NUDL (CONS (CAR LANG) NUDL)) (SETQ LEDL (CONS (CADR LANG) LEDL)) (SETQ LBPL (CONS (CADDR LANG) LBPL)) NIL) (ASSOC X LANGUAGE_ALIST))) (PROGN 'COMPILE (DEFUN (FORGET NUD) NIL (LIST (PROG2 NIL 'FORGET))) (DEFUN FORGET NIL (AND (CDR NUDL) (PROGN (SETQ NUDL (CDR NUDL)) (SETQ LEDL (CDR LEDL)) (SETQ LBPL (CDR LBPL)))) NIL)) (PROGN 'COMPILE (DEFUN (RESETLANGUAGE NUD) NIL (LIST (PROG2 NIL 'RESETLANGUAGE))) (DEFUN RESETLANGUAGE NIL (SETQ NUDL '(NUD)) (SETQ LEDL '(LED)) (SETQ LBPL '(LBP)) (SETQ CNUD 'NUD) (SETQ CLED 'LED) (SETQ CLBP 'LBP) NIL)) (DEFUN LEARN (X) ((LAMBDA (LANG) (COND (LANG (SETQ LANG (CDR LANG))) (T (SETQ LANG (LIST (CAT X 'NUD) (CAT X 'LED) (CAT X 'LBP))) (SETQ LANGUAGE_ALIST (CONS (CONS X LANG) LANGUAGE_ALIST)))) (SETQ CNUD (CAR LANG)) (SETQ CLED (CADR LANG)) (SETQ CLBP (CADDR LANG)) (LIST 'OR (LIST* 'ASSOC (LIST 'QUOTE X) '(LANGUAGE_ALIST)) (LIST* 'PUSH (LIST 'QUOTE (LIST* X LANG)) '(LANGUAGE_ALIST)))) (ASSOC X LANGUAGE_ALIST))) (DEFUN (RIGHT NUD) NIL (LIST 'PARSE DRBP)) (DEFUN (RIGHTLIST NUD) NIL (LIST 'PARSELIST DRBP ''/,)) (DEFUN (RIGHTREP NUD) NIL (LIST 'PARSELIST DRBP (LIST 'QUOTE FUN))) (DEFUN DEFFIX (DENTYPE ISFUN FUN DLBP DRBP) ((LAMBDA (FORM) (COND (DLBP (SETQ FORM (LIST 'PROGN ''COMPILE FORM (LIST 'DEFPROP FUN DLBP CLBP))))) (COND (SYNTAX-NEEDED (EVAL FORM))) FORM) (CONS 'DEFUN (CONS (LIST FUN DENTYPE) (CONS (COND ((EQUAL DENTYPE CLED) '(LEFT))) (PROGN (ADVANCE) (DEPROGNIFY (PARSE 0.)))))))) (DEFUN (NILFIX NUD) NIL (DEFFIX CNUD 'ISN TOKEN NIL NIL)) (DEFUN (PREFIX NUD) NIL (DEFFIX CNUD 'ISP TOKEN NIL (ADVANCE))) (DEFUN (SUFFIX NUD) NIL (DEFFIX CLED 'ISS TOKEN (ADVANCE) NIL)) (DEFUN (INFIX NUD) NIL (DEFFIX CLED 'ISI TOKEN (ADVANCE) TOKEN)) (DEFUN (INFIXR NUD) NIL (DEFFIX CLED 'ISI TOKEN (ADVANCE) (DIFFERENCE TOKEN 1.))) (DEFUN (INFIXD NUD) NIL (DEFFIX CLED 'ISI TOKEN (ADVANCE) (ADVANCE))) (DEFUN (INFIXM NUD) NIL (DEFFIX CLED 'ISM TOKEN (ADVANCE) TOKEN)) (DEFUN (DELIM NUD) NIL ((LAMBDA (FORM) (COND (SYNTAX-NEEDED (EVAL FORM))) FORM) (CONS 'PROGN (MAPCAR (FUNCTION (LAMBDA (I) (LIST 'DEFPROP I 0. CLBP))) (GETVARLIST))))) (DEFUN (IS NUD) NIL (CONS ISFUN (APPEND (COND ((EQUAL DENTYPE CLED) '(LEFT))) (LIST (PARSE 25.)) (COND (DRBP (LIST DRBP))) (COND ((EQUAL ISFUN 'ISM) (LIST (LIST 'QUOTE FUN))))))) (DEFUN ISN (FCN) (LIST FCN)) (DEFUN ISS (LEFT FCN) (LIST FCN LEFT)) (DEFUN ISP (FCN RB) (LIST FCN (PARSE RB))) (DEFUN ISI (LEFT FCN RB) (LIST FCN LEFT (PARSE RB))) (DEFUN ISM (LEFT FCN RB CONT) (CONS FCN (CONS LEFT (PARSELIST RB CONT)))) (PROGN 'COMPILE (DEFUN (CHECK NUD) NIL (LIST (PROG2 NIL 'CHECK) (PROG2 NIL (PARSE 25.)))) (DEFUN CHECK (DEL) (COND ((OR (EQUAL TOKEN DEL) (AND (NOT (ATOM DEL)) (MEMBER TOKEN DEL))) (ADVANCE)) (T (CGOLERR (CAT '|MISSING | DEL '| INSERTED BEFORE | TOKEN) 0. NIL))))) (DEFUN CAT N (IMPLODE (APPLY (FUNCTION APPEND) (MAPCAR (FUNCTION EXPLODEC) (MAPCAR (FUNCTION ARG) (TO 1. N 1.)))))) (DEFUN PARSELIST (RB CONT) (CONS (PARSE RB) (COND ((EQ TOKEN CONT) (ADVANCE) (PARSELIST RB CONT))))) (PROGN 'COMPILE (DEFUN (GETVARLIST NUD) NIL (LIST (PROG2 NIL 'GETVARLIST))) (DEFUN GETVARLIST NIL (COND ((OR (NOT (EQUAL TOKEN '/;)) STRINGNUD) (CONS (PROG2 NIL TOKEN (ADVANCE)) (COND ((EQUAL TOKEN '/,) (ADVANCE) (GETVARLIST)))))))) (PROGN 'COMPILE (DEFUN (GETTOKENS NUD) NIL (LIST (PROG2 NIL 'GETTOKENS))) (DEFUN GETTOKENS NIL (COND ((NOT (MEMBER TOKEN '(|)| ] /'  /;))) (CONS (PROG2 NIL TOKEN (ADVANCE)) (GETTOKENS)))))) (DEFUN DEPROGNIFY (X) (COND ((AND (NOT (ATOM X)) (EQUAL (CAR X) 'PROGN)) (CDR X)) (T (LIST X)))) (PROGN 'COMPILE (DEFUN (NOTIFY NUD) NIL (LIST (PROG2 NIL 'NOTIFY) (PROG2 NIL (PARSE 25.)))) (DEFUN NOTIFY (X) (AND (NOT (EQUAL X T)) (COND ((AND (NOT (ATOM X)) (EQUAL (CAR X) 'NOT)) (CADR X)) (T (LIST 'NOT X)))))) (PROGN 'COMPILE (DEFUN (ORIFY NUD) NIL (LIST (PROG2 NIL 'ORIFY) (PROG2 NIL (PARSE 25.)))) (DEFUN ORIFY (X) (AND X (COND ((AND (NOT (ATOM X)) (NULL (CDR X))) (CAR X)) (T (CONS 'OR X)))))) (DEFUN LITERAL FEXPR (X) (MAPC (FUNCTION (LAMBDA (I) (SET I I))) X)) (PROGN 'COMPILE (DEFUN (ARITH NUD) NIL (LIST (PROG2 NIL 'ARITH) (PROG2 NIL (PARSE 25.)))) (DEFUN ARITH (X) (COND ((SETQ IT (ASSOC X ARITHMETIC_ALIST)) (CDR IT)) (T X)))) (DEFUN (DEFINE NUD) NIL (PROG (FUN TYPE ARGTS CODE INSTR LB RB EXPR FORM) (SETQ EXPR (COND ((MEMBER TOKEN '(EXPR FEXPR LEXPR MACRO)) (PROG2 NIL TOKEN (ADVANCE))) (T 'EXPR))) (COND ((OR STRINGNUD (EQUAL (CGOLTYIPEEK) 40.)) (SETQ ARGTS NIL) (SETQ TYPE CNUD) (SETQ CODE (LIST 'LIST)) (SETQ INSTR (LIST 'PROG2 NIL (LIST 'QUOTE TOKEN)))) (T (SETQ ARGTS (LIST TOKEN)) (ADVANCE) (SETQ TYPE CLED) (SETQ CODE (LIST 'LIST (LIST 'QUOTE TOKEN))) (SETQ INSTR (LIST 'PROG2 NIL 'LEFT)))) (SETQ FUN TOKEN) (ADVANCE) (COND ((AND (EQUAL TOKEN '|(|) (NOT STRINGNUD)) (ADVANCE) (SETQ ARGTS (COND ((NOT (EQUAL TOKEN '|)|)) (GETVARLIST)))) (COND ((EQUAL EXPR 'LEXPR) (SETQ ARGTS (CAR ARGTS)) (SETQ EXPR 'EXPR))) (CHECK '|)|) (SETQ CODE NIL) (SETQ INSTR NIL)) (T (DO NIL ((NOT (OR (NOT (OR (EQUAL TOKEN '/;) (EQUAL TOKEN '/,))) STRINGNUD))) (DO NIL ((NOT STRINGNUD)) (SETQ INSTR (APPEND INSTR (LIST (LIST 'CHECK (LIST 'QUOTE TOKEN))))) (SETQ FORM (CONS (LIST 'DEFPROP TOKEN 0. CLBP) FORM)) (ADVANCE)) (SETQ CODE (APPEND CODE (LIST INSTR))) (COND ((AND (OR (EQUAL TOKEN '/;) (EQUAL TOKEN '/,)) (NOT STRINGNUD)) (SETQ INSTR NIL)) (T (SETQ INSTR (LIST 'PROG2 NIL (LIST 'PARSE '/#RBP))) (SETQ ARGTS (APPEND ARGTS (LIST TOKEN))) (ADVANCE)))))) (SETQ LB (COND ((EQUAL TYPE CLED) (COND ((EQUAL TOKEN '/,) (ADVANCE) (EVAL (PARSE 1.))) (T DEFBP))))) (SETQ RB (COND ((EQUAL TOKEN '/,) (ADVANCE) (EVAL (PARSE 1.))) (T (OR LB DEFBP)))) (SETQ CODE (SUBST RB '/#RBP (APPEND CODE (COND (INSTR (LIST INSTR)))))) (CHECK '/;) (COND (CODE (SETQ FORM (CONS 'PROGN (CONS ''COMPILE (CONS (LIST (PROGN 'DEFUN) (LIST FUN TYPE) (COND ((EQUAL TYPE CLED) '(LEFT))) CODE) (APPEND (COND (LB (LIST (LIST 'DEFPROP FUN LB CLBP)))) (NREVERSE FORM)))))) (COND (SYNTAX-NEEDED (EVAL FORM))))) (COND ((NOT (EQUAL TOKEN ')) (SETQ FORM (APPEND FORM (LIST (CONS (PROGN 'DEFUN) (CONS FUN (APPEND (COND ((NOT (EQUAL EXPR 'EXPR)) (LIST EXPR))) (LIST ARGTS) (DEPROGNIFY (PARSE 0.)))))))))) (RETURN (COND (CODE FORM) (T (CAR FORM)))))) (SETQ DEFBP 25.) (INITIALIZE-MULTI-CHARACTER-TOKEN-TABLE '|-+#&'()*,//:;<=>@[\]^`{/|}~!|) (DEFUN DEFTOK FEXPR (A) (MAPC (FUNCTION PUTTOK) A)) (DEFUN (NEWTOK NUD) NIL ((LAMBDA (FORM) (COND (SYNTAX-NEEDED (EVAL FORM))) FORM) (CONS 'DEFTOK (GETVARLIST)))) (DEFUN (|(| NUD) NIL (PROG2 NIL (PARSE 0.) (CHECK '|)|))) (PROGN (DEFPROP |)| 0. LBP)) (PROGN 'COMPILE (DEFUN (|(| LED) (LEFT) (PROG2 NIL (CONS LEFT (COND ((NOT (EQUAL TOKEN '|)|)) (PARSELIST 0. '/,)))) (CHECK '|)|))) (DEFPROP |(| 30. LBP)) (PROGN (DEFPROP /, 0. LBP)) (PROGN 'COMPILE (DEFUN ({ LED) (LEFT) (PROG2 NIL (CONS 'APPLY (CONS (LIST 'FUNCTION LEFT) (PARSELIST 0. '/,))) (CHECK '}))) (DEFPROP { 30. LBP)) (PROGN (DEFPROP } 0. LBP)) (DEFUN ([ NUD) NIL (PROG2 NIL (COND ((NOT (EQUAL TOKEN '])) ((LAMBDA (A) (COND ((EQUAL TOKEN '|)|) (LIST 'CIRC A)) (T A))) (CONS 'LIST (PARSELIST 0. '/,))))) (CHECK '(] |)|)))) (DEFUN CIRC (X) (PROG2 NIL X (RPLACD (LAST X) X))) (PROGN (DEFPROP ] 0. LBP)) (PROGN 'COMPILE (DEFUN ([ LED) (LEFT) (PROG2 NIL (COND ((EQUAL TOKEN '{) (PROG2 NIL (PROGN (ADVANCE) (SUBLIS (LIST (CONS 'A LEFT) (CONS 'B (PARSE 0.))) '(APPLY (FUNCTION MAPCAR) (CONS (FUNCTION A) B)))) (CHECK '}))) (T (CONS 'MAPCAR (CONS (LIST 'FUNCTION LEFT) (PARSELIST 0. '/,))))) (CHECK ']))) (DEFPROP [ 30. LBP)) (DEFUN (OCT NUD) NIL (PROG2 NIL ((LAMBDA (CIBASE) (CHECK '|(|) (PARSE 0.)) 8.) (CHECK '|)|))) (DEFUN (/' NUD) NIL (PROG2 NIL (ISP 'QUOTE 0.) (CHECK '/'))) (PROGN (DEFPROP /' 0. LBP)) (DEFUN (/# NUD) NIL (PROG2 NIL TOKEN (ADVANCE))) (DEFUN (= NUD) NIL (EVAL (PARSE 25.))) (DEFUN (\ NUD) NIL (PROG2 NIL (CONS 'LAMBDA (CONS (PROG2 NIL (GETVARLIST) (CHECK '/;)) (DEPROGNIFY (PARSE 0.)))) (COND ((EQUAL TOKEN '\) (ADVANCE))))) (PROGN (DEFPROP \ 0. LBP)) (DEFUN (LET NUD) NIL (PROG (VARS ARGTS PACKFLAG) (DO NIL ((MEMBER TOKEN '(/; IN))) (SETQ VARS (APPEND VARS (GETVARLIST))) (CHECK '(BE /:= =)) (SETQ ARGTS (CONS (COND ((EQUAL TOKEN '{) (LIST '&UNP (PROG2 NIL (PROGN (ADVANCE) (PARSE 0.)) (PROGN (SETQ PACKFLAG T) (CHECK '}))))) (T (PARSE 1.))) ARGTS)) (COND ((EQUAL TOKEN '/,) (ADVANCE)))) (ADVANCE) (RETURN (COND (PACKFLAG (SETQ ARGTS (REVERSE (MAPCAR (FUNCTION (LAMBDA (I) (COND ((EQUAL (CAR I) '&UNP) (CADR I)) (T (LIST 'LIST I))))) ARGTS))) (LIST 'APPLY (LIST 'FUNCTION (CONS 'LAMBDA (CONS VARS (DEPROGNIFY (PARSE 0.))))) (COND ((EQUAL (LENGTH ARGTS) 1.) (CAR ARGTS)) (T (CONS 'APPEND ARGTS))))) (T (CONS (CONS 'LAMBDA (CONS VARS (DEPROGNIFY (PARSE 0.)))) (NREVERSE ARGTS))))))) (DEFUN (PROG NUD) NIL (CONS 'PROG (CONS (PROG2 NIL (GETVARLIST) (CHECK '/;)) (DEPROGNIFY (PARSE 0.))))) (DEFUN (NEW NUD) NIL (CONS 'PROG (CONS (PROG2 NIL (GETVARLIST) (CHECK '/;)) ((LAMBDA (X) ((LAMBDA (Y) (RPLACA Y (LIST 'RETURN (CAR Y))) X) (LAST X))) (DEPROGNIFY (PARSE 0.)))))) (DEFUN (SPECIAL NUD) NIL (LIST 'DECLARE (CONS 'SPECIAL (GETVARLIST)))) (DEFUN (LITERAL NUD) NIL (CONS 'LITERAL (PARSELIST 1. '/,))) (DEFUN CGOLARRAY FEXPR (X) (COND ((EQUAL TOKEN '|(|) (PROG2 NIL (PROGN (ADVANCE) (CONS (CAR X) (MAPCAR (FUNCTION (LAMBDA (Y) (LIST 'SUB1 Y))) (PARSELIST 0. '/,)))) (CHECK '|)|))) ((EQUAL TOKEN '/:=) (ADVANCE) (LIST 'FILLARRAY (CAR X) (PARSE 1.))) (T (CAR X)))) (DEFUN (ARRAY NUD) NIL (COND ((MEMBER TOKEN '(|(| { [)) 'ARRAY) (T ((LAMBDA (NAMES) ((LAMBDA (OLDNUDS) (PROG2 NIL (PROGN (MAPC (FUNCTION (LAMBDA (NAME) (PUTPROP NAME (LIST 'LAMBDA NIL (LIST 'CGOLARRAY NAME)) CNUD))) NAMES) (COND ((EQUAL TOKEN '|(|) (ADVANCE) ((LAMBDA (DIMS) (CHECK '|)|) ((LAMBDA (TYPE) ((LAMBDA (SOURCE) (COND ((EQUAL TOKEN '/;) (ADVANCE) (CONS (CONS 'LAMBDA (CONS NAMES (APPEND (COND (SOURCE (MAPCAR (FUNCTION (LAMBDA (NAME) (LIST 'FILLARRAY NAME SOURCE))) NAMES))) (DEPROGNIFY (PARSE 0.))))) (MAPCAR (FUNCTION (LAMBDA (NAME) (CONS 'ARRAY (CONS NIL (CONS TYPE DIMS))))) NAMES))) (T (CONS 'PROG2 (CONS NIL (CONS (LIST 'QUOTE (CAR NAMES)) (MAPCAN (FUNCTION (LAMBDA (NAME) (CONS (LIST 'DEFPROP NAME (GET NAME 'NUD) 'NUD) (CONS (LIST 'SETQ NAME (CONS 'ARRAY (CONS NIL (CONS TYPE DIMS)))) (COND (SOURCE (LIST (LIST 'FILLARRAY NAME SOURCE)))))))) NAMES))))))) (COND ((MEMBER TOKEN '(/:= =)) (ADVANCE) (PARSE 1.))))) (COND ((MEMBER TOKEN '(FIXNUM FLONUM NIL T)) (PROG2 NIL TOKEN (ADVANCE))) (T T)))) (PARSELIST 0. '/,))) ((EQUAL TOKEN '/;) (ADVANCE) (PARSE 0.)))) (MAPC (FUNCTION (LAMBDA (NAME OLDNUD) (COND (OLDNUD (PUTPROP NAME OLDNUD CNUD)) (T (REMPROP NAME CNUD))))) NAMES OLDNUDS))) (MAPCAR (FUNCTION (LAMBDA (NAME) (GET NAME CNUD))) NAMES))) (GETVARLIST))))) (DEFUN (DIM NUD) NIL (LIST 'CDR (LIST 'ARRAYDIMS (PARSE 25.)))) (PUTPROP 'EVAL 1. 'RBP) (PROGN 'COMPILE (DEFUN (/; LED) (LEFT) (ISM LEFT 'PROGN 1. '/;)) (DEFPROP /; 1. LBP)) (PROGN 'COMPILE (DEFUN (& LED) (LEFT) (LIST 'PROG2 NIL LEFT (PARSE 0.))) (DEFPROP & 1. LBP)) (DEFUN (IF NUD) NIL (CONS 'COND (CONS (CONS (PARSE 2.) (PROGN (CHECK 'THEN) (DEPROGNIFY (PARSE 2.)))) (COND ((EQ TOKEN 'ELSE) (ADVANCE) ((LAMBDA (X) (COND ((AND (NOT (ATOM X)) (EQUAL (CAR X) 'COND)) (CDR X)) (T (LIST (CONS T (DEPROGNIFY X)))))) (PARSE 2.))))))) (PROGN (DEFPROP THEN 0. LBP)) (PROGN (DEFPROP ELSE 0. LBP)) (PUTPROP 'RETURN 1. 'RBP) (PUTPROP 'GO 1. 'RBP) (DEFUN (WHILE NUD) NIL (CONS 'DO (CONS NIL (CONS (LIST (NOTIFY (PARSE 2.))) (PROGN (CHECK 'DO) (DEPROGNIFY (PARSE 2.))))))) (DEFUN (REPEAT NUD) NIL (LIST 'DO NIL (LIST (CONS 'PROG2 (APPEND (DEPROGNIFY (PARSE 2.)) (DEPROGNIFY (PROGN (CHECK 'UNTIL) (PARSE 2.)))))))) (PROGN (DEFPROP DO 0. LBP)) (DEFUN (FOR NUD) NIL (PROG (PARS ARGTS INON FCN BODY) (SETQ PARS (LIST TOKEN)) (SETQ INON (ADVANCE)) (ADVANCE) (SETQ FCN (ASSOC INON '((IN (DO MAPC) (COLLECT MAPCAR) (COALESCE MAPCAN)) (ON (DO MAP) (COLLECT MAPLIST) (COALESCE MAPCON))))) (COND (FCN (SETQ FCN (CDR FCN))) (T (CGOLERR (CAT INON '| FOUND WHERE IN OR ON EXPECTED|) 2. T))) (SETQ ARGTS (LIST (PARSE 1.))) (DO NIL ((NOT (EQ TOKEN '/,))) (SETQ PARS (CONS (ADVANCE) PARS)) (ADVANCE) (CHECK INON) (SETQ ARGTS (CONS (PARSE 1.) ARGTS))) (SETQ FCN (ASSOC TOKEN FCN)) (COND (FCN (SETQ FCN (CADR FCN))) (T (CGOLERR (CAT TOKEN '| FOUND WHERE DO, COLLECT OR COALESCE EXPECTED|) 2. T))) (ADVANCE) (SETQ ARGTS (NREVERSE ARGTS)) (SETQ PARS (NREVERSE PARS)) (SETQ BODY (PARSE 1.)) (RETURN (COND ((AND (EQUAL FCN 'MAPC) (APPLY (FUNCTION LAND) (MAPCAR (FUNCTION (LAMBDA (X) (AND (NOT (ATOM X)) (EQUAL (CAR X) 'TO)))) ARGTS))) (CONS 'DO (CONS (MAPCAR (FUNCTION (LAMBDA (P A) (LIST P (CADR A) (COND ((EQUAL (CADDDR A) 1.) (LIST 'ADD1 P)) (T (LIST 'PLUS P (CADDDR A))))))) PARS ARGTS) (CONS (LIST (ORIFY (MAPCAR (FUNCTION (LAMBDA (P A) (LIST 'GREATERP P (CADDR A)))) PARS ARGTS))) (DEPROGNIFY BODY))))) (T (CONS FCN (CONS (LIST 'FUNCTION (COND ((AND (EQUAL (CDR BODY) PARS) (ATOM (CAR BODY))) (CAR BODY)) (T (LIST 'LAMBDA PARS BODY)))) ARGTS))))))) (PROGN (PROGN (DEFPROP IN 0. LBP)) (PROGN (DEFPROP ON 0. LBP)) (PROGN (DEFPROP COLLECT 0. LBP)) (PROGN (DEFPROP COALESCE 0. LBP))) (DEFUN (ITER NUD) NIL (PROG (IVARS WHENVAR RESULT BODY) (DO NIL ((NOT (SETQ IT (ASSOC TOKEN '((FOR (SETQ IVARS (CONS (CONS TOKEN (COND ((EQUAL ( ADVANCE) '/:=) (CONS (PROGN (ADVANCE) (SETQ IT (PARSE 2.))) (COND ((EQUAL TOKEN 'STEP) (LIST (COND ((EQUAL (ADVANCE) 'DITTO) (ADVANCE) IT) (T (PARSE 2.) ))))))))) IVARS))) (WHEN (SETQ WHENVAR (PARSE 2.))) (UNTIL (SETQ WHENVAR (PARSE 2.))) (WHILE (SETQ WHENVAR (LIST 'NOT (PARSE 2.)))) (RETURN (SETQ RESULT (PARSE 2.))) (DO (SETQ BODY (PARSE 2.)))))))) (ADVANCE) (EVAL (CADR IT))) (COND ((NOT (OR IVARS WHENVAR RESULT BODY)) (SETQ BODY (PARSE 2.)))) (RETURN (APPEND (LIST 'DO (NREVERSE IVARS) (LIST WHENVAR RESULT)) (COND ((AND (NOT (ATOM BODY)) (EQ (CAR BODY) 'PROGN)) (CDR BODY)) (T (NCONS BODY))))))) (PROGN (DEFPROP FOR 0. LBP) (DEFPROP WHEN 0. LBP) (DEFPROP UNTIL 0. LBP) (DEFPROP WHILE 0. LBP) (DEFPROP STEP 0. LBP) (DEFPROP RETURN 0. LBP)) (PROGN 'COMPILE (DEFUN (TO LED) (LEFT) (CONS 'TO (CONS LEFT (CONS (PARSE 18.) (LIST (COND ((EQUAL TOKEN 'BY) (ADVANCE) (PARSE 18.)) (T 1.))))))) (DEFPROP TO 18. LBP)) (PROGN (DEFPROP BY 0. LBP)) (DEFUN TO (AA B C) (COND ((GREATERP AA B) NIL) (T (PROG (X) (RETURN (PROG2 NIL (SETQ X (LIST AA)) (DO NIL ((LESSP B (SETQ AA (PLUS AA C)))) (SETQ X (CDR (RPLACD X (LIST AA))))))))))) (PROGN 'COMPILE (DEFUN (LOTSOF LED) (LEFT) (LIST 'DO '*I LEFT '(DIFFERENCE *I 1.) '(NOT (GREATERP *I 0.)) (PARSE 1.))) (DEFPROP LOTSOF 19. LBP)) (DEFTOK /:=) (PUTPROP 'CGOLPRINT '(LAMBDA NIL (LIST 'CGOLPRINT (PARSE 1.))) 'NUD) (PUTPROP 'CGOLPRIN1 '(LAMBDA NIL (LIST 'CGOLPRIN1 (PARSE 1.))) 'NUD) (PROGN 'COMPILE (DEFUN (/:= LED) (LEFT) (COND ((ATOM LEFT) (ISI LEFT 'SETQ 1.)) ((EQ (CAR LEFT) 'GET) (LIST 'PUTPROP (CADR LEFT) (PARSE 1.) (CADDR LEFT))) ((SETQ IT (GET (CAR LEFT) 'STOREFORM)) ((LAMBDA (X) (SUBLIS (LIST (CONS 'LEFT (CADR LEFT)) (CONS 'RIGHT (PARSE 1.))) X)) IT)) (T (ISI LEFT 'STORE 1.)))) (DEFPROP /:= 25. LBP)) (PROGN (PUTPROP 'CAR '(RPLACA LEFT RIGHT) 'STOREFORM) (PUTPROP 'CDR '(RPLACD LEFT RIGHT) 'STOREFORM) (PUTPROP 'ARG '(SETARG LEFT RIGHT) 'STOREFORM) (PUTPROP 'PLIST '(SETPLIST LEFT RIGHT) 'STOREFORM) (PUTPROP 'STATUS '(SSTATUS LEFT RIGHT) 'STOREFORM)) (MAPC (FUNCTION (LAMBDA (I) (PUTPROP I (SUBST I 'I '(LAMBDA NIL '(STATUS I))) 'NUD))) '(TOPLEVEL BREAKLEVEL WHO2 WHO3 TTYSCAN TTYREAD TTYINT GCTIME)) (PROGN 'COMPILE (DEFUN (OF LED) (LEFT) (LIST 'GET (PARSE 25.) LEFT)) (DEFPROP OF 26. LBP)) (PROGN 'COMPILE (DEFUN (OFQ LED) (LEFT) (LIST 'GET (PARSE 25.) (LIST 'QUOTE LEFT))) (DEFPROP OFQ 26. LBP)) (PUTPROP 'NOT 9. 'RBP) (PROGN 'COMPILE (DEFUN (NOT LED) (LEFT) (LIST 'NOT (FUNCALL (LED) LEFT))) (DEFPROP NOT 10. LBP)) (PROGN 'COMPILE (DEFUN (AND LED) (LEFT) (ISM LEFT 'AND 8. 'AND)) (DEFPROP AND 8. LBP)) (PROGN 'COMPILE (DEFUN (OR LED) (LEFT) (ISM LEFT 'OR 7. 'OR)) (DEFPROP OR 7. LBP)) (PROGN (DEFTOK =/#) (DEFTOK =$) (DEFTOK /#) (DEFTOK <$) (DEFTOK >$) (DEFTOK <=) (DEFTOK >=)) (PROGN 'COMPILE (DEFUN (= LED) (LEFT) (ISI LEFT (ARITH 'EQUAL) 10.)) (DEFPROP = 10. LBP)) (PROGN 'COMPILE (DEFUN (NE LED) (LEFT) (LIST 'NOT (ISI LEFT (ARITH 'EQUAL) 10.))) (DEFPROP NE 10. LBP)) (PROGN 'COMPILE (DEFUN (EQ LED) (LEFT) (ISI LEFT 'EQ 10.)) (DEFPROP EQ 10. LBP)) (PROGN 'COMPILE (DEFUN (< LED) (LEFT) (ISM LEFT (ARITH 'LESSP) 10. '<)) (DEFPROP < 10. LBP)) (PROGN 'COMPILE (DEFUN (> LED) (LEFT) (ISM LEFT (ARITH 'GREATERP) 10. '>)) (DEFPROP > 10. LBP)) (PROGN 'COMPILE (DEFUN (=/# LED) (LEFT) (ISI LEFT '= 10.)) (DEFPROP =/# 10. LBP)) (PROGN 'COMPILE (DEFUN (=$ LED) (LEFT) (ISI LEFT '= 10.)) (DEFPROP =$ 10. LBP)) (PROGN 'COMPILE (DEFUN (/# LED) (LEFT) (ISI LEFT '> 10.)) (DEFPROP >/# 10. LBP)) (PROGN 'COMPILE (DEFUN (<$ LED) (LEFT) (ISI LEFT '< 10.)) (DEFPROP <$ 10. LBP)) (PROGN 'COMPILE (DEFUN (>$ LED) (LEFT) (ISI LEFT '> 10.)) (DEFPROP >$ 10. LBP)) (PROGN 'COMPILE (DEFUN (<= LED) (LEFT) (LIST 'NOT (ISI LEFT (ARITH 'GREATERP) 10.))) (DEFPROP <= 10. LBP)) (PROGN 'COMPILE (DEFUN (>= LED) (LEFT) (LIST 'NOT (ISI LEFT (ARITH 'LESSP) 10.))) (DEFPROP >= 10. LBP)) (PROGN 'COMPILE (DEFUN (/| LED) (LEFT) (LIST (ARITH 'ZEROP) (LIST (ARITH 'REMAINDER) (PARSE 10.) LEFT))) (DEFPROP /| 10. LBP)) (PROGN 'COMPILE (DEFUN (ISIN LED) (LEFT) (ISI LEFT 'MEMBER 10.)) (DEFPROP ISIN 10. LBP)) (PROGN 'COMPILE (DEFUN (ISATOM LED) (LEFT) (ISS LEFT 'ATOM)) (DEFPROP ISATOM 10. LBP)) (PROGN 'COMPILE (DEFUN (ISNUM LED) (LEFT) (ISS LEFT 'NUMBERP)) (DEFPROP ISNUM 10. LBP)) (PROGN 'COMPILE (DEFUN (EXISTS LED) (LEFT) (LIST 'SETQ 'IT LEFT)) (DEFPROP EXISTS 10. LBP)) (PUTPROP 'NULL 10. 'RBP) (PROGN 'COMPILE (DEFUN (|.| LED) (LEFT) (ISI LEFT 'CONS 14.)) (DEFPROP |.| 15. LBP)) (PROGN 'COMPILE (DEFUN (@ LED) (LEFT) (ISM LEFT 'APPEND 15. '@)) (DEFPROP @ 15. LBP)) (DEFUN ({ NUD) NIL (PROG2 NIL (CONS 'GATHER (COND ((NOT (EQUAL TOKEN '})) (PARSELIST 0. '/,)))) (CHECK '}))) (PROGN 'COMPILE (DEFUN (|| LED) (LEFT) (ISM LEFT 'UNION 16. '||)) (DEFPROP || 16. LBP)) (PROGN 'COMPILE (DEFUN (/ LED) (LEFT) (ISM LEFT 'INTERSECT 16. '/)) (DEFPROP / 16. LBP)) (DEFUN (~ NUD) NIL (ISP 'SETDIFF 16.)) (PROGN 'COMPILE (DEFUN (~ LED) (LEFT) (ISM LEFT 'SETDIFF 16. '~)) (DEFPROP ~ 16. LBP)) (PROGN 'COMPILE (DEFUN (/ LED) (LEFT) (ISM LEFT 'ELEMENTP 10. '/)) (DEFPROP / 10. LBP)) (PROGN 'COMPILE (DEFUN (/ LED) (LEFT) (ISM LEFT 'SUBSETP 10. '/)) (DEFPROP / 10. LBP)) (PROGN (MAPC (FUNCTION (LAMBDA (U) (OR (FBOUNDP U) (PUTPROP U '((DSK LIBLSP) SETS FASL) 'AUTOLOAD)))) '(GATHER UNION INTERSECT SETDIFF ELEMENTS ELEMENTP SUBSETP SYMDIFF CLEARSETS)) (IF (FBOUNDP '*LEXPR) (EVAL '(*LEXPR UNION INTERSECT SETDIFF SYMDIFF)))) (PROGN 'COMPILE (DEFUN (^ LED) (LEFT) (ISM LEFT 'CAT 18. '^)) (DEFPROP ^ 18. LBP)) (PROGN 'COMPILE (DEFUN (CAT LED) (LEFT) (ISM LEFT 'CAT 18. 'CAT)) (DEFPROP CAT 18. LBP)) (DEFUN (/| NUD) NIL (PROG2 NIL (ISP (ARITH 'ABS) 19.) (CHECK '/|))) (DEFUN (+ NUD) NIL (COND ((MEMBER TOKEN '(|(| { [)) (ARITH 'PLUS)) (T (PARSE 20.)))) (PROGN 'COMPILE (DEFUN (+ LED) (LEFT) (ISM LEFT (ARITH 'PLUS) 20. '+)) (DEFPROP + 20. LBP)) (PROGN 'COMPILE (DEFUN (- LED) (LEFT) (ISM LEFT (ARITH 'DIFFERENCE) 20. '-)) (DEFPROP - 20. LBP)) (DEFUN (- NUD) NIL (ISP (ARITH 'MINUS) 20.)) (DEFUN (* NUD) NIL (COND ((MEMBER TOKEN '(|(| [ {)) (ARITH 'TIMES)) (T '*))) (PROGN 'COMPILE (DEFUN (* LED) (LEFT) (ISM LEFT (ARITH 'TIMES) 21. '*)) (DEFPROP * 21. LBP)) (PROGN 'COMPILE (DEFUN (// LED) (LEFT) (LIST (ARITH 'QUOTIENT) LEFT (LIST (ARITH 'FLOAT) (PARSE 21.)))) (DEFPROP // 21. LBP)) (DEFTOK ///:) (PROGN 'COMPILE (DEFUN (///: LED) (LEFT) (ISM LEFT (ARITH 'QUOTIENT) 21. '///:)) (DEFPROP ///: 21. LBP)) (PROGN 'COMPILE (DEFUN (REM LED) (LEFT) (ISI LEFT (ARITH 'REMAINDER) 21.)) (DEFPROP REM 21. LBP)) (PROGN 'COMPILE (DEFUN (MOD LED) (LEFT) (LIST 'MOD (PROG2 NIL LEFT) (PROG2 NIL (PARSE 21.)))) (DEFPROP MOD 21. LBP) (DEFUN MOD (A B) ((LAMBDA (X) (COND ((AND (NOT (EQUAL (MINUSP A) (MINUSP B))) (NOT (ZEROP X))) (PLUS X B)) (T X))) (REMAINDER A B)))) (DEFTOK **) (PROGN 'COMPILE (DEFUN (** LED) (LEFT) (ISI LEFT (ARITH 'EXPT) 21.)) (DEFPROP ** 22. LBP)) (PROGN (DEFTOK +/#) (DEFTOK -/#) (DEFTOK */#) (DEFTOK |//#|) (DEFTOK \\)) (PROGN 'COMPILE (DEFUN (+/# LED) (LEFT) (ISM LEFT '+ 20. '+/#)) (DEFPROP +/# 20. LBP)) (PROGN 'COMPILE (DEFUN (-/# LED) (LEFT) (ISM LEFT '- 20. '-/#)) (DEFPROP -/# 20. LBP)) (PROGN 'COMPILE (DEFUN (*/# LED) (LEFT) (ISM LEFT '* 21. '*/#)) (DEFPROP */# 21. LBP)) (PROGN 'COMPILE (DEFUN (|//#| LED) (LEFT) (ISM LEFT '// 21. '|//#|)) (DEFPROP |//#| 21. LBP)) (PROGN 'COMPILE (DEFUN (\\ LED) (LEFT) (ISI LEFT '\\ 19.)) (DEFPROP \\ 19. LBP)) (PROGN (DEFTOK +$) (DEFTOK -$) (DEFTOK *$) (DEFTOK //$)) (PROGN 'COMPILE (DEFUN (+$ LED) (LEFT) (ISM LEFT '+$ 20. '+$)) (DEFPROP +$ 20. LBP)) (PROGN 'COMPILE (DEFUN (-$ LED) (LEFT) (ISM LEFT '-$ 20. '-$)) (DEFPROP -$ 20. LBP)) (PROGN 'COMPILE (DEFUN (*$ LED) (LEFT) (ISM LEFT '*$ 21. '*$)) (DEFPROP *$ 21. LBP)) (PROGN 'COMPILE (DEFUN (//$ LED) (LEFT) (ISM LEFT '//$ 21. '//$)) (DEFPROP //$ 21. LBP)) (PROGN (DEFTOK /:N/:) (DEFTOK /:A/:) (DEFTOK /:V/:) (DEFTOK /:X/:) (DEFTOK /:^/:)) (DEFUN (/:N/: NUD) NIL (LIST 'BOOLE 12. 0. (PARSE 21.))) (PROGN 'COMPILE (DEFUN (/:A/: LED) (LEFT) (CONS 'BOOLE (CONS 1. (CONS LEFT (PARSELIST 21. '/:A/:))))) (DEFPROP /:A/: 21. LBP)) (PROGN 'COMPILE (DEFUN (/:V/: LED) (LEFT) (CONS 'BOOLE (CONS 7. (CONS LEFT (PARSELIST 20. '/:V/:))))) (DEFPROP /:V/: 20. LBP)) (PROGN 'COMPILE (DEFUN (/:X/: LED) (LEFT) (CONS 'BOOLE (CONS 6. (CONS LEFT (PARSELIST 20. '/:X/:))))) (DEFPROP /:X/: 20. LBP)) (PROGN 'COMPILE (DEFUN (/:^/: LED) (LEFT) (ISI LEFT 'LSH 22.)) (DEFPROP /:^/: 22. LBP)) (PUTPROP 'PRINT 2. 'RBP) (PUTPROP 'PRINC 2. 'RBP) (PUTPROP 'PRIN1 2. 'RBP) (DEFUN (WRITE NUD) NIL (SUBST (CONS 'LIST (PARSELIST 2. '/,)) 'X '(PROGN (TERPRI) (MAPC (FUNCTION PRINC) X) (PRINC '| |)))) (DEFUN (NEWLINE NUD) NIL (ISN 'TERPRI)) (DEFUN (UREAD NUD) NIL (CONS 'UREAD (GETTOKENS))) (DEFUN (UWRITE NUD) NIL (CONS 'UWRITE (GETTOKENS))) (DEFUN (UFILE NUD) NIL (CONS 'UFILE (GETTOKENS))) (PROGN (SETQ SYNTAX-NEEDED T) (SETQ SILENCE (MINUS 1.)) (SETQ DEFBP 25.) (SETQ NUDL '(NUD)) (SETQ LEDL '(LED)) (SETQ LBPL '(LBP)) (SETQ CNUD 'NUD) (SETQ CLED 'LED) (SETQ CLBP 'LBP) (SETQ FUN 'TOP-LEVEL) (SETQ LANGUAGE_ALIST NIL) (SETQ ARITHMETIC_ALIST NIL))