(FILECREATED " 7-Dec-84 21:22:35" {ISI-VAXA}</USR4/LIPKIS>UTILISOPRS.;3 3868
changes to: (VARS UTILISOPRSCOMS)
(I.S.OPRS MINIMIZE MAXIMIZE)
previous date: "28-OCT-82 12:18:28" {ISI-VAXA}</USR4/LIPKIS>UTILISOPRS.;2)
(PRETTYCOMPRINT UTILISOPRSCOMS)
(RPAQQ UTILISOPRSCOMS [(I.S.OPRS ELSE COLLECTWHEN INTERSECT MAXIMIZE MINIMIZE REPEATEACHTIME THEN
UNION UNIQUE YIELD FIRSTTIME fintersect funion)
(ADDVARS (LOCALVARS $$STATE $$TMP $$UIV $$UNQ $$FLTR)
(SYSLOCALVARS $$STATE $$TMP $$UIV $$UNQ $$FLTR))
(* This package allows THEN and ELSE <and then and else> to PrettyPrint
properly, in spite of the redefinition of them as i.s.operators.
Implemented by Lee Erman, from an idea of Phil London's.)
(FNS FIntersection FUnion IF-PRETTYPRINTMACRO PRINT-THEN/ELSE-IN-IF)
(ADDVARS (PRETTYPRINTMACROS (IF . IF-PRETTYPRINTMACRO)
(if . IF-PRETTYPRINTMACRO)])
(DECLARE: EVAL@COMPILE
[I.S.OPR (QUOTE ELSE)
NIL
(QUOTE (finally (OR $$VAL (RETURN BODY]
(I.S.OPR (QUOTE COLLECTWHEN)
NIL
(QUOTE (bind $$FLTR when (SETQ $$FLTR BODY)
collect $$FLTR)))
(I.S.OPR (QUOTE INTERSECT)
[QUOTE (PROGN (INTBOD ← BODY)
(OR ($$VAL ← (COND ($$VAL (INTERSECTION $$VAL INTBOD))
(T INTBOD)))
(GO $$OUT]
(QUOTE (BIND INTBOD)))
(I.S.OPR (QUOTE MAXIMIZE)
NIL
(QUOTE (largest BODY yield $$EXTREME)))
(I.S.OPR (QUOTE MINIMIZE)
NIL
(QUOTE (smallest BODY yield $$EXTREME)))
[I.S.OPR (QUOTE REPEATEACHTIME)
NIL
(QUOTE (repeatuntil (PROGN BODY NIL]
[I.S.OPR (QUOTE THEN)
NIL
(QUOTE (finally (AND $$VAL (RETURN BODY]
[I.S.OPR (QUOTE UNION)
(QUOTE ($$VAL ← (UNION $$VAL BODY]
[I.S.OPR (QUOTE UNIQUE)
(QUOTE (if $$VAL
then ($$VAL← NIL)
(GO $$OUT)
else $$VAL ← $$UNQ $$UIV ← I.V.))
(QUOTE (bind ($$UNQ $$UIV)
when $$UNQ ← BODY finally (I.V.← (AND $$VAL $$UIV]
[I.S.OPR (QUOTE YIELD)
NIL
(QUOTE (FINALLY (RETURN BODY]
[I.S.OPR (QUOTE FIRSTTIME)
NIL
(QUOTE (bind ($$MEMO ← T)
unless
(AND $$MEMO (PROGN BODY T)
(SETQ $$MEMO NIL]
(I.S.OPR (QUOTE fintersect)
[QUOTE (PROGN (INTBOD ← BODY)
(OR ($$VAL ← (COND ($$VAL (FIntersection $$VAL INTBOD))
(T INTBOD)))
(GO $$OUT]
(QUOTE (BIND INTBOD)))
[I.S.OPR (QUOTE funion)
(QUOTE ($$VAL ← (FUnion $$VAL BODY]
)
(ADDTOVAR LOCALVARS $$STATE $$TMP $$UIV $$UNQ $$FLTR)
(ADDTOVAR SYSLOCALVARS $$STATE $$TMP $$UIV $$UNQ $$FLTR)
(* This package allows THEN and ELSE <and then and else> to PrettyPrint properly, in spite of
the redefinition of them as i.s.operators. Implemented by Lee Erman, from an idea of Phil
London's.)
(DEFINEQ
(FIntersection
[LAMBDA (X Y) (* TAL "27-OCT-82 17:54")
(for item in X when (FMEMB item Y) collect item])
(FUnion
[LAMBDA (X Y) (* TAL "28-OCT-82 12:00")
(bind (tmp ← Y) for item in X unless (FMEMB item tmp) do (push tmp item) finally (RETURN tmp])
(IF-PRETTYPRINTMACRO
[LAMBDA (EXPR)
(COND
((EQ [CAR (DEFERREDCONSTANT (GETPROP (QUOTE THEN)
(QUOTE CLISPWORD]
(QUOTE IFWORD))
EXPR)
(T (RESETFORM (PRINT-THEN/ELSE-IN-IF (QUOTE IFWORD))
(PRINTDEF EXPR NIL T))
NIL])
(PRINT-THEN/ELSE-IN-IF
[LAMBDA (WHATWORD)
[MAPC [DEFERREDCONSTANT (LIST (GETPROP (QUOTE then)
(QUOTE CLISPWORD))
(GETPROP (QUOTE THEN)
(QUOTE CLISPWORD))
(GETPROP (QUOTE else)
(QUOTE CLISPWORD))
(GETPROP (QUOTE ELSE)
(QUOTE CLISPWORD]
(FUNCTION (LAMBDA (X)
(FRPLACA X WHATWORD]
(QUOTE FORWORD])
)
(ADDTOVAR PRETTYPRINTMACROS (IF . IF-PRETTYPRINTMACRO)
(if . IF-PRETTYPRINTMACRO))
(DECLARE: DONTCOPY
(FILEMAP (NIL (2689 3743 (FIntersection 2699 . 2878) (FUnion 2880 . 3109) (IF-PRETTYPRINTMACRO 3111 .
3371) (PRINT-THEN/ELSE-IN-IF 3373 . 3741)))))
STOP