home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; (c) Copyright 1981 Massachusetts Institute of Technology ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- (macsyma-module grind)
-
- (declare-top (GENPREFIX GRI)
- (SPECIAL LOP ROP STRING CHRPS $ALIASES ALIASLIST LINEL)
- (FIXNUM (CHRCT))
- (*EXPR LBP RBP))
-
- (DEFUN CHRCT () (f- LINEL CHRPS))
-
- (DEFUN CHRCT* () (f- LINEL CHRPS))
-
- #-MAXII
- (DEFVAR ALPHABET '(#\% #\_))
- (DEFVAR FORTRANP NIL)
-
- ;(DEFMSPEC $GRIND (X) (SETQ X (CDR X))
- ; (LET (Y)
- ; (IF (NOT (ZEROP (CHARPOS T))) (MTERPRI))
- ; (COND ((OR (NULL X) (CDR X)) (WNA-ERR '$GRIND))
- ; ((ATOM (SETQ X (STRMEVAL (CAR X))))
- ; (SETQ X ($VERBIFY X))
- ; (COND ((SETQ Y (MGET X 'MEXPR))
- ; (MGRIND (LIST '(MDEFINE) (CONS (LIST X) (CDADR Y)) (CADDR Y)) NIL))
- ; ((SETQ Y (MGET X 'MMACRO))
- ; (MGRIND (LIST '(MDEFMACRO) (CONS (LIST X) (CDADR Y)) (CADDR Y)) NIL))
- ; ((SETQ Y (MGET X 'AEXPR))
- ; (MGRIND (LIST '(MDEFINE) (CONS (LIST X 'ARRAY) (CDADR Y)) (CADDR Y)) NIL))
- ; (T (MGRIND X NIL)))
- ; (TYO #/$ NIL))
- ; (T (MGRIND X NIL) (TYO #/$ NIL)))
- ; '$DONE))
- ;Update from F302 --gsb
- (DEFMSPEC $GRIND (X) (SETQ X (CDR X))
- (LET (Y)
- (IF (NOT (ZEROP (CHARPOS T))) (MTERPRI))
- (COND ((OR (NULL X) (CDR X)) (WNA-ERR '$GRIND))
- ((SYMBOLP (SETQ X (STRMEVAL (CAR X))))
- (SETQ X ($VERBIFY X))
- (COND ((SETQ Y (MGET X 'MEXPR))
- (MGRIND (LIST '(MDEFINE) (CONS (LIST X) (CDADR Y)) (CADDR Y)) NIL))
- ((SETQ Y (MGET X 'MMACRO))
- (MGRIND (LIST '(MDEFMACRO) (CONS (LIST X) (CDADR Y)) (CADDR Y)) NIL))
- ((SETQ Y (MGET X 'AEXPR))
- (MGRIND (LIST '(MDEFINE) (CONS (LIST X 'array) (CDADR Y)) (CADDR Y)) NIL))
- (T (MGRIND X NIL)))
- (TYO #\$ NIL))
- (T (MGRIND X NIL) (TYO #\$ NIL)))
- '$DONE))
-
- (defun show-msize (lis)
- (format t "~%Length is ~A" (car lis))
- (sloop for v in (cdr lis)
- when (numberp v) do (princ (ascii v))
- else when (consp v)
- do (show-msize v)))
- ;;Msize returns a list whose first member is the number of characters
- ;;in the printed representation of the rest of the list.
- ;;thus to print something given it's msize you could
- ;;use msize-print if you did not care about line breaks etc.
- ;;If you care about them then you should send a newline
- ;;if the current distance to the margin is bigger than the first element of lis
-
- (defun msize-print (lis)
- (sloop for v in (cdr lis)
- when (numberp v)
- do (princ (ascii v))
- else do (msize-print v)))
-
- (defun i-$grind (x)
- (LET (Y)
- (IF (NOT (ZEROP (CHARPOS T))) (MTERPRI))
- (COND ((SYMBOLP (SETQ X (STRMEVAL X)))
- (SETQ X ($VERBIFY X))
- (COND ((SETQ Y (MGET X 'MEXPR))
- (MGRIND (LIST '(MDEFINE) (CONS (LIST X) (CDADR Y)) (CADDR Y)) NIL))
- ((SETQ Y (MGET X 'MMACRO))
- (MGRIND (LIST '(MDEFMACRO) (CONS (LIST X) (CDADR Y)) (CADDR Y)) NIL))
- ((SETQ Y (MGET X 'AEXPR))
- (MGRIND (LIST '(MDEFINE) (CONS (LIST X 'array) (CDADR Y)) (CADDR Y)) NIL))
- (T (MGRIND X NIL)))
- (TYO #\$ NIL))
- (T (MGRIND X NIL) (TYO #\$ NIL)))
- '$DONE))
-
-
- (DEFUN MGRIND (X OUT)
- (SETQ CHRPS 0)
- (MPRINT (MSIZE X NIL NIL 'MPAREN 'MPAREN) OUT))
-
- (DEFUN MPRINT (X OUT)
- (COND (#-cl (INTEGERP X)
- #+cl (characterp x)
- (SETQ CHRPS (f1+ CHRPS)) (TYO X OUT))
- ((< (CAR X) (CHRCT*)) (MAPC #'(LAMBDA (L) (MPRINT L OUT)) (CDR X)))
- (T (PROG (I) (SETQ I CHRPS)
- (MPRINT (CADR X) OUT)
- (COND ((NULL (CDDR X)) (RETURN NIL))
- ((AND (OR (ATOM (CADR X)) (< (CAADR X) (CHRCT*)))
- (OR (> (CHRCT*) (// LINEL 2))
- (ATOM (CADDR X)) (< (CAADDR X) (CHRCT*))))
- (SETQ I CHRPS)
- (MPRINT (CADDR X) OUT))
- (T (SETQ I (f1+ I)) (SETQ CHRPS 0) (TERPRI OUT)
- (MTYOTBSP I OUT) (MPRINT (CADDR X) OUT)))
- (DO ((L (CDDDR X) (CDR L))) ((NULL L))
- (cond
- ((OR (ATOM (CAR L)) (< (CAAR L) (CHRCT*))) NIL)
- (t (SETQ CHRPS 0) (TERPRI OUT) (MTYOTBSP I OUT)))
- (MPRINT (CAR L) OUT))))))
-
- (DEFUN MTYOTBSP (N OUT) (DECLARE (FIXNUM N))
- (SETQ CHRPS (f+ N CHRPS))
- (DO () ((< N 8)) (TYO #\TAB OUT) (SETQ N (f- N 8)))
- (DO () ((< N 1)) (TYO #\SPACE OUT) (SETQ N (f1- N))))
-
- (DEFUN STRGRIND (X)
- (LET (STRING (CHRPS 0))
- (STRPRINT (MSIZE X NIL NIL 'MPAREN 'MPAREN))
- (NREVERSE STRING)))
-
- (DEFUN STRPRINT (X)
- (COND ((ATOM X) (STYO X))
- ((< (CAR X) (CHRCT*)) (MAPC #'STRPRINT (CDR X)))
- (T (PROG (I)
- (SETQ I CHRPS)
- (STRPRINT (CADR X))
- (COND ((NULL (CDDR X)) (RETURN NIL))
- ((AND (OR (ATOM (CADR X)) (< (CAADR X) (CHRCT*)))
- (OR (> (CHRCT*) (// LINEL 2))
- (ATOM (CADDR X)) (< (CAADDR X) (CHRCT*))))
- (SETQ I CHRPS)
- (STRPRINT (CADDR X)))
- (T (SETQ I (f1+ I)) (SETQ CHRPS 0) (STERPRI)
- (STYOTBSP I) (STRPRINT (CADDR X))))
- (DO ((L (CDDDR X) (CDR L))) ((NULL L))
- (cond
- ((OR (ATOM (CAR L)) (< (CAAR L) (CHRCT*))) NIL)
- (t (SETQ CHRPS 0) (STERPRI) (STYOTBSP I)))
- (STRPRINT (CAR L)))))))
-
- (DEFUN STYO (X) (SETQ STRING (CONS X STRING) CHRPS (f1+ CHRPS)))
-
- (DEFUN STERPRI () (SETQ STRING (CONS #\NEWLINE STRING) CHRPS 0))
-
- (DEFUN STYOTBSP (N) (DECLARE (FIXNUM N)) (SETQ CHRPS N)
- (DO () ((< N 8)) (SETQ STRING (CONS #\TAB STRING) N (f- N 8)))
- (DO () ((< N 1)) (SETQ STRING (CONS #\SPACE STRING) N (f1- N))))
-
- (DEFMFUN MSTRING (X)
- (NREVERSE (STRING1 (MSIZE X NIL NIL 'MPAREN 'MPAREN) NIL)))
-
- (DEFUN STRING1 (X L)
- (cond
- ((ATOM X) (CONS X L))
- (t (SETQ X (CDR X))
- (DO () ((NULL X) L) (SETQ L (STRING1 (CAR X) L) X (CDR X))))))
-
-
-
- (DEFUN MSIZE (X L R LOP ROP)
- (SETQ X (NFORMAT X))
- (COND ((ATOM X) (IF FORTRANP (MSZ (MAKESTRING X) L R) (MSIZE-ATOM X L R)))
- ((OR (<= (LBP (CAAR X)) (RBP LOP)) (> (LBP ROP) (RBP (CAAR X))))
- (MSIZE-PAREN X L R))
- ((MEMQ 'array (CDAR X)) (MSIZE-ARRAY X L R))
- ((safe-GET (CAAR X) 'GRIND)
- (the (values t) (FUNCALL (GET (CAAR X) 'GRIND) X L R)))
- (T (MSIZE-FUNCTION X L R NIL))))
-
- (DEFUN MSIZE-ATOM (X L R)
- (PROG (Y)
- (COND ((NUMBERP X) (SETQ Y (EXPLODEN X)))
- ((AND (SETQ Y (safe-GET X 'REVERSEALIAS))
- (NOT (AND (MEMQ X $ALIASES) (GET X 'NOUN))))
- (SETQ Y (EXPLODEN Y)))
- ((SETQ Y (ASSQR X ALIASLIST)) (RETURN (MSIZE (CAR Y) L R LOP ROP)))
- ((NULL (SETQ Y (IF (EQ '%DERIVATIVE X)
- (COPY-TOP-LEVEL '(#\% #\D #\I #\F #\F))
- (EXPLODEN X)))))
- ((char= #\$ (CAR Y)) (SETQ Y (SLASH (CDR Y))))
- ((char= #\% (CAR Y)) (SETQ Y (SLASH (CDR Y))))
- ((char= #\& (CAR Y))
- (DO ((L (CDR Y) (CDR L))) ((NULL L))
- (COND ((OR (zl-MEMBER (CAR L)
- '(#. double-quote-char
- #. back-slash-char
- #. semi-colon-char #\$))
- (AND (char< (CAR L) #\space)
- (NOT (char= (CAR L) #\return ;13
- ))))
- (RPLACD L (CONS (CAR L) (CDR L)))
- (RPLACA L #. back-slash-char) (SETQ L (CDR L)))))
- (SETQ Y (CONS #. double-quote-char (NCONC (CDR Y) (LIST #. double-quote-char)))))
- (T (SETQ Y (CONS #\? (SLASH Y)))))
- (RETURN (MSZ Y L R))))
-
- (DEFUN MSZ (X L R) (SETQ X (NRECONC L (NCONC X R))) (CONS (LENGTH X) X))
-
- (DEFUN SLASH (X)
- (DO ((L (CDR X) (CDR L))) ((NULL L))
- (IF (or (#+cl ALPHANUMERICP #-cl ALPHANUMP (CAR L))
- (eql (car l) #\_))
- NIL
- (progn (RPLACD L (CONS (CAR L) (CDR L)))
- (RPLACA L #. back-slash-char) (SETQ L (CDR L)))))
- (IF (ALPHABETP (CAR X)) X (CONS #. back-slash-char X)))
-
- #-cl
- (DEFUN ALPHANUMP (N) (DECLARE (FIXNUM N))
- (OR (ASCII-NUMBERP N) (ALPHABETP N)))
-
- (DEFUN MSIZE-PAREN (X L R) (MSIZE X (CONS #. left-parentheses-char L) (CONS #. right-parentheses-char R) 'MPAREN 'MPAREN))
-
- ;; The variables LB and RB are not uses here syntactically, but for
- ;; communication. The FORTRAN program rebinds them to #/( and #/) since
- ;; Fortran array references are printed with parens instead of brackets.
-
- (DEFVAR LB #\[)
- (DEFVAR RB #\])
-
- (DEFUN MSIZE-ARRAY (X L R &AUX F)
- (IF (EQ (CAAR X) 'MQAPPLY) (SETQ F (CADR X) X (CDR X)) (SETQ F (CAAR X)))
- (COND ((AND (symbolp (CAAR X)) (GET (CAAR X) 'VERB) (GET (CAAR X) 'ALIAS))
- (SETQ L (RECONC '(#\' #\') L)))
- ((AND (symbolp (CAAR X))
- (GET (CAAR X) 'NOUN)
- (NOT (MEMQ (CAAR X) (CDR $ALIASES)))
- (NOT (GET (CAAR X) 'REVERSEALIAS)))
- (SETQ L (CONS #\' L))))
- (SETQ L (MSIZE F L (LIST LB) LOP 'MFUNCTION)
- R (MSIZE-LIST (CDR X) NIL (CONS RB R)))
- (CONS (f+ (CAR L) (CAR R)) (CONS L (CDR R))))
-
- (DEFUN MSIZE-FUNCTION (X L R OP)
- (COND ((not (symbolp (caar x))))
- ((AND (GET (CAAR X) 'VERB) (GET (CAAR X) 'ALIAS))
- (SETQ L (RECONC '(#\' #\') L)))
- ((AND (GET (CAAR X) 'NOUN) (NOT (MEMQ (CAAR X) (CDR $ALIASES)))
- (NOT (GET (CAAR X) 'REVERSEALIAS)))
- (SETQ L (CONS #\' L))))
- (SETQ L (MSIZE (IF OP (GETOP (CAAR X)) (CAAR X)) L (NCONS #. left-parentheses-char ) 'MPAREN 'MPAREN)
- R (MSIZE-LIST (CDR X) NIL (CONS #. right-parentheses-char R)))
- (CONS (f+ (CAR L) (CAR R)) (CONS L (CDR R))))
-
- (DEFUN MSIZE-LIST (X L R)
- (IF (NULL X) (MSZ NIL L R)
- (DO ((NL) (W 0))
- ((NULL (CDR X))
- (SETQ NL (CONS (MSIZE (CAR X) L R 'MPAREN 'MPAREN) NL))
- (CONS (f+ W (CAAR NL)) (NREVERSE NL)))
- (DECLARE (FIXNUM W))
- (SETQ NL (CONS (MSIZE (CAR X) L (LIST #\,) 'MPAREN 'MPAREN) NL)
- W (f+ W (CAAR NL)) X (CDR X) L NIL))))
-
- (DEFUN MSIZE-PREFIX (X L R)
- (MSIZE (CADR X) (RECONC (STRSYM (CAAR X)) L) R (CAAR X) ROP))
-
- (DEFUN MSIZE-INFIX (X L R)
- (IF (OR (NULL (CDDR X)) (CDDDR X)) (WNA-ERR (CAAR X)))
- (SETQ L (MSIZE (CADR X) L NIL LOP (CAAR X))
- R (MSIZE (CADDR X) (REVERSE (STRSYM (CAAR X))) R (CAAR X) ROP))
- (LIST (f+ (CAR L) (CAR R)) L R))
-
- (DEFUN MSIZE-POSTFIX (X L R)
- (MSIZE (CADR X) L (APPEND (STRSYM (CAAR X)) R) LOP (CAAR X)))
-
- (DEFUN MSIZE-NARY (X L R) (MSZNARY X L R (STRSYM (CAAR X))))
-
- (DEFUN MSIZE-NOFIX (X L R) (MSIZE (CAAR X) L R (CAAR X) ROP))
-
- (DEFUN MSIZE-MATCHFIX (X L R)
- (SETQ L (NRECONC L (CAR (STRSYM (CAAR X))))
- L (CONS (LENGTH L) L)
- R (APPEND (CDR (STRSYM (CAAR X))) R)
- X (MSIZE-LIST (CDR X) NIL R))
- (CONS (f+ (CAR L) (CAR X)) (CONS L (CDR X))))
-
- (DEFUN MSZNARY (X L R DISSYM)
- (COND ((NULL (CDDR X)) (MSIZE-FUNCTION X L R T))
- (T (SETQ L (MSIZE (CADR X) L NIL LOP (CAAR X)))
- (DO ((OL (CDDR X) (CDR OL)) (NL (LIST L)) (W (CAR L)))
- ((NULL (CDR OL))
- (SETQ R (MSIZE (CAR OL) (REVERSE DISSYM) R (CAAR X) ROP))
- (CONS (f+ (CAR R) W) (NREVERSE (CONS R NL))))
- (DECLARE (FIXNUM W))
- (SETQ NL (CONS (MSIZE (CAR OL) (REVERSE DISSYM) NIL (CAAR X) (CAAR X))
- NL)
- W (f+ (CAAR NL) W))))))
-
- (DEFUN STRSYM (X) (OR (GET X 'STRSYM) (GET X 'DISSYM)))
-
- (DEFPROP BIGFLOAT MSZ-BIGFLOAT GRIND)
-
- (DEFUN MSZ-BIGFLOAT (X L R)
- (MSZ (MAPCAR #'(LAMBDA (L) (GETCHARN L 1)) (FPFORMAT X)) L R))
-
- (DEFPROP MPROGN MSIZE-MATCHFIX GRIND)
- (DEFPROP MLIST MSIZE-MATCHFIX GRIND)
-
- (DEFPROP MQAPPLY MSZ-MQAPPLY GRIND)
-
- (DEFUN MSZ-MQAPPLY (X L R)
- (SETQ L (MSIZE (CADR X) L (LIST #. left-parentheses-char ) LOP 'MFUNCTION)
- R (MSIZE-LIST (CDDR X) NIL (CONS #. right-parentheses-char R)))
- (CONS (f+ (CAR L) (CAR R)) (CONS L (CDR R))))
-
-
- (DEFPROP MQUOTE MSIZE-PREFIX GRIND)
- (DEFPROP MQUOTE 201. RBP)
- (DEFPROP MSETQ MSIZE-INFIX GRIND)
- (DEFPROP MSETQ MSIZE-INFIX GRIND)
-
- (DEFPROP MSETQ (#\:) STRSYM)
- (DEFPROP MSETQ 180. RBP)
- (DEFPROP MSETQ 20. RBP)
-
- (DEFPROP MSET MSIZE-INFIX GRIND)
- (DEFPROP MSET (#\: #\:) STRSYM)
- (DEFPROP MSET 180. LBP)
- (DEFPROP MSET 20. RBP)
-
- (DEFPROP MDEFINE MSZ-MDEF GRIND)
- (DEFPROP MDEFINE (#\: #\=) STRSYM)
- (DEFPROP MDEFINE 180. LBP)
- (DEFPROP MDEFINE 20. RBP)
-
- (DEFPROP MDEFMACRO MSZ-MDEF GRIND)
- (DEFPROP MDEFMACRO (#\: #\: #\=) STRSYM)
- (DEFPROP MDEFMACRO 180. LBP)
- (DEFPROP MDEFMACRO 20. RBP)
-
- (DEFUN MSZ-MDEF (X L R)
- (SETQ L (MSIZE (CADR X) L (COPY-TOP-LEVEL (STRSYM (CAAR X))) LOP (CAAR X))
- R (MSIZE (CADDR X) NIL R (CAAR X) ROP))
- (SETQ X (CONS (f- (CAR L) (CAADR L)) (CDDR L)))
- (IF (AND (NOT (ATOM (CADR R))) (NOT (ATOM (CADDR R)))
- (< (f+ (CAR L) (CAADR R) (CAADDR R)) LINEL))
- (SETQ X (NCONC X (LIST (CADR R) (CADDR R)))
- R (CONS (CAR R) (CDDDR R))))
- (CONS (f+ (CAR L) (CAR R)) (CONS (CADR L) (CONS X (CDR R)))))
-
-
- (DEFPROP MFACTORIAL MSIZE-POSTFIX GRIND)
- (DEFPROP MFACTORIAL 160. LBP)
-
- (DEFPROP MEXPT MSZ-MEXPT GRIND)
- (DEFPROP MEXPT 140. LBP)
- (DEFPROP MEXPT 139. RBP)
-
- (DEFUN MSZ-MEXPT (X L R)
- (SETQ L (MSIZE (CADR X) L NIL LOP 'MEXPT)
- R (IF (MMMINUSP (SETQ X (NFORMAT (CADDR X))))
- (MSIZE (CADR X) (REVERSE '(#\^ #\-)) R 'MEXPT ROP)
- (MSIZE X (LIST #\^) R 'MEXPT ROP)))
- (LIST (f+ (CAR L) (CAR R)) L R))
-
-
- (DEFPROP MNCEXPT MSIZE-INFIX GRIND)
- (DEFPROP MNCEXPT 135. LBP)
- (DEFPROP MNCEXPT 134. RBP)
-
- (DEFPROP MNCTIMES MSIZE-NARY GRIND)
- (DEFPROP MNCTIMES 110. LBP)
- (DEFPROP MNCTIMES 109. RBP)
-
- (DEFPROP MTIMES MSZ-MTIMES GRIND)
- (DEFPROP MTIMES 120. LBP)
- (DEFPROP MTIMES 120. RBP)
-
- (DEFUN MSZ-MTIMES (X L R) (MSZNARY X L R '(#\*)))
-
-
- (DEFPROP MQUOTIENT MSIZE-INFIX GRIND)
- (DEFPROP MQUOTIENT 120. LBP)
- (DEFPROP MQUOTIENT 121. RBP)
- (DEFPROP RAT MSIZE-INFIX GRIND)
- (DEFPROP RAT 120. LBP)
- (DEFPROP RAT 121. RBP)
-
- (DEFPROP MPLUS MSZ-MPLUS GRIND)
- (DEFPROP MPLUS 100. LBP)
- (DEFPROP MPLUS 100. RBP)
-
- (DEFUN MSZ-MPLUS (X L R)
- (COND ((NULL (CDDR X))
- (IF (NULL (CDR X))
- (MSIZE-FUNCTION X L R T)
- (MSIZE (CADR X) (APPEND (NCONS #\+) L) R 'MPLUS ROP)))
- (T (SETQ L (MSIZE (CADR X) L NIL LOP 'MPLUS) X (CDDR X))
- (DO ((NL (LIST L)) (W (CAR L)) (DISSYM))
- ((NULL (CDR X))
- (IF (MMMINUSP (CAR X)) (SETQ L (CADAR X) DISSYM (LIST #\-))
- (SETQ L (CAR X) DISSYM (LIST #\+)))
- (SETQ R (MSIZE L DISSYM R 'MPLUS ROP))
- (CONS (f+ (CAR R) W) (NREVERSE (CONS R NL))))
- (DECLARE (FIXNUM W))
- (IF (MMMINUSP (CAR X)) (SETQ L (CADAR X) DISSYM (LIST #\-))
- (SETQ L (CAR X) DISSYM (LIST #\+)))
- (SETQ NL (CONS (MSIZE L DISSYM NIL 'MPLUS 'MPLUS) NL)
- W (f+ (CAAR NL) W)
- X (CDR X))))))
-
- (DEFPROP MMINUS MSIZE-PREFIX GRIND)
- (DEFPROP MMINUS (#\-) STRSYM)
- (DEFPROP MMINUS 100. RBP)
- (DEFPROP MMINUS 100. LBP)
-
- (DEFPROP MEQUAL MSIZE-INFIX GRIND)
- (DEFPROP MEQUAL 80. LBP)
- (DEFPROP MEQUAL 80. RBP)
-
- (DEFPROP MNOTEQUAL MSIZE-INFIX GRIND)
- (DEFPROP MNOTEQUAL 80. LBP)
- (DEFPROP MNOTEQUAL 80. RBP)
-
- (DEFPROP MGREATERP MSIZE-INFIX GRIND)
- (DEFPROP MGREATERP 80. LBP)
- (DEFPROP MGREATERP 80. RBP)
-
- (DEFPROP MGEQP MSIZE-INFIX GRIND)
- (DEFPROP MGEQP 80. LBP)
- (DEFPROP MGEQP 80. RBP)
-
- (DEFPROP MLESSP MSIZE-INFIX GRIND)
- (DEFPROP MLESSP 80. LBP)
- (DEFPROP MLESSP 80. RBP)
-
- (DEFPROP MLEQP MSIZE-INFIX GRIND)
- (DEFPROP MLEQP 80. LBP)
- (DEFPROP MLEQP 80. RBP)
-
- (DEFPROP MNOT MSIZE-PREFIX GRIND)
- (DEFPROP MNOT 70. RBP)
-
- (DEFPROP MAND MSIZE-NARY GRIND)
- (DEFPROP MAND 60. LBP)
- (DEFPROP MAND 60. RBP)
-
- (DEFPROP MOR MSIZE-NARY GRIND)
- (DEFPROP MOR 50. LBP)
- (DEFPROP MOR 50. RBP)
-
- (DEFPROP MCOND MSZ-MCOND GRIND)
- (DEFPROP MCOND 25. LBP)
- (DEFPROP MCOND 25. RBP)
-
- (DEFUN MSZ-MCOND (X L R &AUX IF)
- (SETQ IF (NRECONC L '(#\I #\F #\SPACE)) IF (CONS (LENGTH IF) IF)
- L (MSIZE (CADR X) NIL NIL 'MCOND 'MPAREN))
- (COND ((EQ '$FALSE (FIFTH X))
- (SETQ X (MSIZE (CADDR X)
- (REVERSE '(#\SPACE #\T #\H #\E #\N #\SPACE))
- R 'MCOND ROP))
- (LIST (f+ (CAR IF) (CAR L) (CAR X)) IF L X))
- (T (SETQ R (MSIZE (FIFTH X)
- (REVERSE '(#\SPACE #\E #\L #\S #\E #\SPACE))
- R 'MCOND ROP)
- X (MSIZE (CADDR X)
- (REVERSE '(#\SPACE #\T #\H #\E #\N #\SPACE))
- NIL 'MCOND 'MPAREN))
- (LIST (f+ (CAR IF) (CAR L) (CAR X) (CAR R)) IF L X R))))
-
- (defprop text-string msize-text-string grind)
- (defun msize-text-string (x l r)
- (cons (length (cdr x)) (cdr x))
- )
-
- (DEFPROP MDO MSZ-MDO GRIND)
- (DEFPROP MDO 30. LBP)
- (DEFPROP MDO 30. RBP)
- (DEFPROP MDOIN MSZ-MDOIN GRIND)
- (DEFPROP MDOIN 30. RBP)
-
- (DEFUN MSZ-MDO (X L R)
- (MSZNARY (CONS '(MDO) (STRMDO X)) L R '(#\SPACE)))
-
- (DEFUN MSZ-MDOIN (X L R)
- (MSZNARY (CONS '(MDO) (STRMDOIN X)) L R '(#\SPACE)))
-
- (DEFUN STRMDO (X)
- (NCONC (COND ((SECOND X) `($FOR ,(SECOND X))))
- (COND ((EQUAL 1 (THIRD X)) NIL)
- ((THIRD X) `($FROM ,(THIRD X))))
- (COND ((EQUAL 1 (FOURTH X)) NIL)
- ((FOURTH X) `($STEP ,(FOURTH X)))
- ((FIFTH X) `($NEXT ,(FIFTH X))))
- (COND ((SIXTH X) `($THRU ,(SIXTH X))))
- (COND ((NULL (SEVENTH X)) NIL)
- ((EQ 'MNOT (CAAR (SEVENTH X)))
- `($WHILE ,(CADR (SEVENTH X))))
- (T `($UNLESS ,(SEVENTH X))))
- `($DO ,(EIGHTH X))))
-
- (DEFUN STRMDOIN (X)
- (NCONC `($FOR ,(SECOND X) $IN ,(THIRD X))
- (COND ((SIXTH X) `($THRU ,(SIXTH X))))
- (COND ((NULL (SEVENTH X)) NIL)
- ((EQ 'MNOT (CAAR (SEVENTH X)))
- `($WHILE ,(CADR (SEVENTH X))))
- (T `($UNLESS ,(SEVENTH X))))
- `($DO ,(EIGHTH X))))
-
-
-
-