(FILECREATED "16-Jul-86 01:24:59" {ERIS}<LISPCORE>EVAL>CMLSEQMODIFY.;1 64131        changes to:  (FUNCTIONS VECTOR-SUBSTITUTE*)      previous date: " 2-Jul-86 18:08:00" {ERIS}<LISPCORE>LIBRARY>CMLSEQMODIFY.;1)(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)(PRETTYCOMPRINT CMLSEQMODIFYCOMS)(RPAQQ CMLSEQMODIFYCOMS ((DECLARE: EVAL@COMPILE DONTCOPY (FILES CMLSEQCOMMON))                         (FUNCTIONS FILL LIST-FILL LIST-FILL* VECTOR-FILL VECTOR-FILL*)                         (FUNCTIONS MUMBLE-REPLACE-FROM-MUMBLE LIST-REPLACE-FROM-LIST                                 LIST-REPLACE-FROM-MUMBLE MUMBLE-REPLACE-FROM-LIST CL:REPLACE                                 LIST-REPLACE-FROM-LIST* LIST-REPLACE-FROM-VECTOR*                                 VECTOR-REPLACE-FROM-LIST* VECTOR-REPLACE-FROM-VECTOR*)                         (COMS (FUNCTIONS MUMBLE-DELETE MUMBLE-DELETE-FROM-END LIST-DELETE                                       LIST-DELETE-FROM-END)                               (FUNCTIONS NORMAL-MUMBLE-DELETE NORMAL-MUMBLE-DELETE-FROM-END                                       NORMAL-LIST-DELETE NORMAL-LIST-DELETE-FROM-END CL:DELETE)                               (FUNCTIONS IF-MUMBLE-DELETE IF-MUMBLE-DELETE-FROM-END IF-LIST-DELETE                                       IF-LIST-DELETE-FROM-END DELETE-IF)                               (FUNCTIONS IF-NOT-MUMBLE-DELETE IF-NOT-MUMBLE-DELETE-FROM-END                                       IF-NOT-LIST-DELETE IF-NOT-LIST-DELETE-FROM-END DELETE-IF-NOT))                         (COMS (FUNCTIONS MUMBLE-REMOVE-MACRO MUMBLE-REMOVE MUMBLE-REMOVE-FROM-END                                       LIST-REMOVE-MACRO LIST-REMOVE LIST-REMOVE-FROM-END)                               (FUNCTIONS NORMAL-MUMBLE-REMOVE NORMAL-MUMBLE-REMOVE-FROM-END                                       NORMAL-LIST-REMOVE NORMAL-LIST-REMOVE-FROM-END CL:REMOVE)                               (FUNCTIONS IF-MUMBLE-REMOVE IF-MUMBLE-REMOVE-FROM-END IF-LIST-REMOVE                                       IF-LIST-REMOVE-FROM-END REMOVE-IF)                               (FUNCTIONS IF-NOT-MUMBLE-REMOVE IF-NOT-MUMBLE-REMOVE-FROM-END                                       IF-NOT-LIST-REMOVE IF-NOT-LIST-REMOVE-FROM-END REMOVE-IF-NOT))                         (FUNCTIONS LIST-REMOVE-DUPLICATES* VECTOR-REMOVE-DUPLICATES*                                 REMOVE-DUPLICATES LIST-DELETE-DUPLICATES* VECTOR-DELETE-DUPLICATES*                                 DELETE-DUPLICATES)                         (FUNCTIONS SUBST-DISPATCH LIST-SUBSTITUTE* VECTOR-SUBSTITUTE* SUBSTITUTE                                 SUBSTITUTE-IF SUBSTITUTE-IF-NOT)                         (FUNCTIONS NLIST-SUBSTITUTE* NVECTOR-SUBSTITUTE* NSUBSTITUTE                                 NLIST-SUBSTITUTE-IF* NVECTOR-SUBSTITUTE-IF* NSUBSTITUTE-IF                                 NLIST-SUBSTITUTE-IF-NOT* NVECTOR-SUBSTITUTE-IF-NOT*                                 NSUBSTITUTE-IF-NOT)                         (PROP FILETYPE CMLSEQMODIFY)))(DECLARE: EVAL@COMPILE DONTCOPY (FILESLOAD CMLSEQCOMMON))(DEFUN FILL (SEQUENCE ITEM &KEY (START 0)                   END &AUX (LENGTH (CL:LENGTH SEQUENCE)))                                               "Replace the specified elements of SEQUENCE with ITEM."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (LIST-FILL* SEQUENCE ITEM START END)          (VECTOR-FILL* SEQUENCE ITEM START END)))(DEFMACRO LIST-FILL (SEQUENCE ITEM START END) (BQUOTE (CL:DO ((CURRENT (NTHCDR (\, START)                                                                              (\, SEQUENCE))                                                                     (CDR CURRENT))                                                              (INDEX (\, START)                                                                     (1+ INDEX)))                                                             ((OR (ENDP CURRENT)                                                                  (>= INDEX (\, END)))                                                              SEQUENCE)                                                             (RPLACA CURRENT (\, ITEM)))))(DEFUN LIST-FILL* (SEQUENCE ITEM START END)                  (* raf "17-Dec-85 22:37") (LIST-FILL                                                                                        SEQUENCE ITEM                                                                                         START END))(DEFMACRO VECTOR-FILL (SEQUENCE ITEM START END) (BQUOTE (CL:DO ((INDEX (\, START)                                                                       (1+ INDEX)))                                                               ((>= INDEX (\, END))                                                                (\, SEQUENCE))                                                               (SETF (AREF (\, SEQUENCE)                                                                           INDEX)                                                                     (\, ITEM)))))(DEFUN VECTOR-FILL* (SEQUENCE ITEM START END)                (* raf "17-Dec-85 22:37") (VECTOR-FILL                                                                                        SEQUENCE ITEM                                                                                         START END))(DEFMACRO MUMBLE-REPLACE-FROM-MUMBLE NIL (BQUOTE (CL:IF (AND (EQ TARGET-SEQUENCE SOURCE-SEQUENCE)                                                             (> TARGET-START SOURCE-START))                                                        (LET ((NELTS (MIN (- TARGET-END TARGET-START)                                                                          (- SOURCE-END SOURCE-START)                                                                          )))                                                             (CL:DO ((TARGET-INDEX (+ TARGET-START                                                                                       NELTS -1)                                                                            (1- TARGET-INDEX))                                                                     (SOURCE-INDEX (+ SOURCE-START                                                                                       NELTS -1)                                                                            (1- SOURCE-INDEX)))                                                                    ((< TARGET-INDEX TARGET-START)                                                                     TARGET-SEQUENCE)                                                                    (SETF (AREF TARGET-SEQUENCE                                                                                 TARGET-INDEX)                                                                          (AREF SOURCE-SEQUENCE                                                                                 SOURCE-INDEX))))                                                        (CL:DO ((TARGET-INDEX TARGET-START                                                                       (1+ TARGET-INDEX))                                                                (SOURCE-INDEX SOURCE-START                                                                       (1+ SOURCE-INDEX)))                                                               ((OR (>= TARGET-INDEX TARGET-END)                                                                    (>= SOURCE-INDEX SOURCE-END))                                                                TARGET-SEQUENCE)                                                               (SETF (AREF TARGET-SEQUENCE                                                                            TARGET-INDEX)                                                                     (AREF SOURCE-SEQUENCE                                                                            SOURCE-INDEX))))))(DEFMACRO LIST-REPLACE-FROM-LIST NIL (BQUOTE (COND                                                ((AND (EQ TARGET-SEQUENCE SOURCE-SEQUENCE)                                                      (> TARGET-START SOURCE-START))                                                 (LET ((NEW-ELTS (SUBSEQ SOURCE-SEQUENCE SOURCE-START                                                                        (+ SOURCE-START                                                                           (MIN (- TARGET-END                                                                                    TARGET-START)                                                                                (- SOURCE-END                                                                                    SOURCE-START))))))                                                      (CL:DO ((N NEW-ELTS (CDR N))                                                              (O (NTHCDR TARGET-START TARGET-SEQUENCE                                                                        )                                                                 (CDR O)))                                                             ((ENDP N)                                                              TARGET-SEQUENCE)                                                             (RPLACA O (CAR N)))))                                                (T (CL:DO ((TARGET-INDEX TARGET-START (1+                                                                                          TARGET-INDEX                                                                                          ))                                                           (SOURCE-INDEX SOURCE-START (1+                                                                                          SOURCE-INDEX                                                                                          ))                                                           (TARGET-SEQUENCE-REF (NTHCDR TARGET-START                                                                                       TARGET-SEQUENCE                                                                                       )                                                                  (CDR TARGET-SEQUENCE-REF))                                                           (SOURCE-SEQUENCE-REF (NTHCDR SOURCE-START                                                                                       SOURCE-SEQUENCE                                                                                       )                                                                  (CDR SOURCE-SEQUENCE-REF)))                                                          ((OR (>= TARGET-INDEX TARGET-END)                                                               (>= SOURCE-INDEX SOURCE-END)                                                               (NULL TARGET-SEQUENCE-REF)                                                               (NULL SOURCE-SEQUENCE-REF))                                                           TARGET-SEQUENCE)                                                          (RPLACA TARGET-SEQUENCE-REF (CAR                                                                                   SOURCE-SEQUENCE-REF                                                                                           )))))))(DEFMACRO LIST-REPLACE-FROM-MUMBLE NIL (BQUOTE (CL:DO ((TARGET-INDEX TARGET-START (1+ TARGET-INDEX))                                                       (SOURCE-INDEX SOURCE-START (1+ SOURCE-INDEX))                                                       (TARGET-SEQUENCE-REF (NTHCDR TARGET-START                                                                                    TARGET-SEQUENCE)                                                              (CDR TARGET-SEQUENCE-REF)))                                                      ((OR (>= TARGET-INDEX TARGET-END)                                                           (>= SOURCE-INDEX SOURCE-END)                                                           (ENDP TARGET-SEQUENCE-REF))                                                       TARGET-SEQUENCE)                                                      (RPLACA TARGET-SEQUENCE-REF (AREF                                                                                       SOURCE-SEQUENCE                                                                                         SOURCE-INDEX)                                                             ))))(DEFMACRO MUMBLE-REPLACE-FROM-LIST NIL (BQUOTE (CL:DO ((TARGET-INDEX TARGET-START (1+ TARGET-INDEX))                                                       (SOURCE-INDEX SOURCE-START (1+ SOURCE-INDEX))                                                       (SOURCE-SEQUENCE (NTHCDR SOURCE-START                                                                                SOURCE-SEQUENCE)                                                              (CDR SOURCE-SEQUENCE)))                                                      ((OR (>= TARGET-INDEX TARGET-END)                                                           (>= SOURCE-INDEX SOURCE-END)                                                           (ENDP SOURCE-SEQUENCE))                                                       TARGET-SEQUENCE)                                                      (SETF (AREF TARGET-SEQUENCE TARGET-INDEX)                                                            (CAR SOURCE-SEQUENCE)))))(DEFUN CL:REPLACE (TARGET-SEQUENCE SOURCE-SEQUENCE &KEY ((:START1 TARGET-START)                                                         0)                         ((:END1 TARGET-END))                         ((:START2 SOURCE-START)                          0)                         ((:END2 SOURCE-END))                         &AUX                         (TARGET-LENGTH (CL:LENGTH TARGET-SEQUENCE))                         (SOURCE-LENGTH (CL:LENGTH SOURCE-SEQUENCE)))                                                              (* jrb: "23-Apr-86 11:00")   (CL:UNLESS TARGET-END (SETQ TARGET-END TARGET-LENGTH))   (CL:UNLESS SOURCE-END (SETQ SOURCE-END SOURCE-LENGTH))   (CHECK-SUBSEQ TARGET-SEQUENCE TARGET-START TARGET-END TARGET-LENGTH)   (CHECK-SUBSEQ SOURCE-SEQUENCE SOURCE-START SOURCE-END SOURCE-LENGTH)   (SEQ-DISPATCH TARGET-SEQUENCE (SEQ-DISPATCH SOURCE-SEQUENCE (LIST-REPLACE-FROM-LIST)                                        (LIST-REPLACE-FROM-MUMBLE))          (SEQ-DISPATCH SOURCE-SEQUENCE (MUMBLE-REPLACE-FROM-LIST)                 (MUMBLE-REPLACE-FROM-MUMBLE))))(DEFUN LIST-REPLACE-FROM-LIST* (TARGET-SEQUENCE SOURCE-SEQUENCE TARGET-START TARGET-END SOURCE-START                                       SOURCE-END) (COND                                                     ((NULL TARGET-END)                                                      (SETQ TARGET-END (CL:LENGTH TARGET-SEQUENCE))))                                                  (COND                                                     ((NULL SOURCE-END)                                                      (SETQ SOURCE-END (CL:LENGTH SOURCE-SEQUENCE))))                                                  (LIST-REPLACE-FROM-LIST))(DEFUN LIST-REPLACE-FROM-VECTOR* (TARGET-SEQUENCE SOURCE-SEQUENCE TARGET-START TARGET-END                                         SOURCE-START SOURCE-END) (COND                                                                    ((NULL TARGET-END)                                                                     (SETQ TARGET-END (CL:LENGTH                                                                                                                                                                             TARGET-SEQUENCE                                                                                       ))))                                                                 (COND                                                                    ((NULL SOURCE-END)                                                                     (SETQ SOURCE-END (CL:LENGTH                                                                                                                                                                             SOURCE-SEQUENCE                                                                                       ))))                                                                 (LIST-REPLACE-FROM-MUMBLE))(DEFUN VECTOR-REPLACE-FROM-LIST* (TARGET-SEQUENCE SOURCE-SEQUENCE TARGET-START TARGET-END                                         SOURCE-START SOURCE-END) (COND                                                                    ((NULL TARGET-END)                                                                     (SETQ TARGET-END (CL:LENGTH                                                                                                                                                                             TARGET-SEQUENCE                                                                                       ))))                                                                 (COND                                                                    ((NULL SOURCE-END)                                                                     (SETQ SOURCE-END (CL:LENGTH                                                                                                                                                                             SOURCE-SEQUENCE                                                                                       ))))                                                                 (MUMBLE-REPLACE-FROM-LIST))(DEFUN VECTOR-REPLACE-FROM-VECTOR* (TARGET-SEQUENCE SOURCE-SEQUENCE TARGET-START TARGET-END                                           SOURCE-START SOURCE-END) (COND                                                                      ((NULL TARGET-END)                                                                       (SETQ TARGET-END (CL:LENGTH                                                                                                                                                                               TARGET-SEQUENCE                                                                                         ))))                                                                   (COND                                                                      ((NULL SOURCE-END)                                                                       (SETQ SOURCE-END (CL:LENGTH                                                                                                                                                                               SOURCE-SEQUENCE                                                                                         ))))                                                                   (MUMBLE-REPLACE-FROM-MUMBLE))(DEFMACRO MUMBLE-DELETE (PRED) (BQUOTE (CL:DO ((INDEX START (1+ INDEX))                                               (JNDEX START)                                               (NUMBER-ZAPPED 0))                                              ((OR (= INDEX END)                                                   (= NUMBER-ZAPPED COUNT))                                               (CL:DO ((INDEX INDEX (1+ INDEX))                                                       (JNDEX JNDEX (1+ JNDEX)))                                                      ((= INDEX LENGTH)                                                       (SHRINK-VECTOR SEQUENCE JNDEX))                                                      (SETF (AREF SEQUENCE JNDEX)                                                            (AREF SEQUENCE INDEX))))                                              (SETF (AREF SEQUENCE JNDEX)                                                    (AREF SEQUENCE INDEX))                                              (CL:IF (\, PRED)                                                     (INCF NUMBER-ZAPPED)                                                     (INCF JNDEX)))))(DEFMACRO MUMBLE-DELETE-FROM-END (PRED) (BQUOTE (CL:DO ((INDEX (1- END)                                                               (1- INDEX))                                                        (NUMBER-ZAPPED 0)                                                        (LOSERS NIL)                                                        (TERMINUS (1- START)))                                                       ((OR (= INDEX TERMINUS)                                                            (= NUMBER-ZAPPED COUNT))                                                        (CL:DO ((LOSERS LOSERS)                                                                (INDEX START (1+ INDEX))                                                                (JNDEX START))                                                               ((OR (NULL LOSERS)                                                                    (= INDEX END))                                                                (CL:DO ((INDEX INDEX (1+ INDEX))                                                                        (JNDEX JNDEX (1+ JNDEX)))                                                                       ((= INDEX LENGTH)                                                                        (SHRINK-VECTOR SEQUENCE JNDEX                                                                               ))                                                                       (SETF (AREF SEQUENCE JNDEX)                                                                             (AREF SEQUENCE INDEX))))                                                               (SETF (AREF SEQUENCE JNDEX)                                                                     (AREF SEQUENCE INDEX))                                                               (CL:IF (= INDEX (CAR LOSERS))                                                                      (CL:POP LOSERS)                                                                      (INCF JNDEX))))                                                       (LET ((THIS-ELEMENT (AREF SEQUENCE INDEX)))                                                            (COND                                                               ((\, PRED)                                                                (INCF NUMBER-ZAPPED)                                                                (CL:PUSH INDEX LOSERS)))))))(DEFMACRO LIST-DELETE (PRED) (BQUOTE (LET ((HANDLE (CONS NIL SEQUENCE)))                                          (CL:DO ((CURRENT (NTHCDR START SEQUENCE)                                                         (CDR CURRENT))                                                  (PREVIOUS (NTHCDR START HANDLE))                                                  (INDEX START (1+ INDEX))                                                  (NUMBER-ZAPPED 0))                                                 ((OR (= INDEX END)                                                      (= NUMBER-ZAPPED COUNT))                                                  (CDR HANDLE))                                                 (COND                                                    ((\, PRED)                                                     (RPLACD PREVIOUS (CDR CURRENT))                                                     (INCF NUMBER-ZAPPED))                                                    (T (CL:POP PREVIOUS)))))))(DEFMACRO LIST-DELETE-FROM-END (PRED) (BQUOTE (LET* ((REVERSE (REVERSE SEQUENCE))                                                     (HANDLE (CONS NIL REVERSE)))                                                    (CL:DO ((CURRENT (NTHCDR (- LENGTH END)                                                                            REVERSE)                                                                   (CDR CURRENT))                                                            (PREVIOUS (NTHCDR (- LENGTH END)                                                                             HANDLE))                                                            (INDEX START (1+ INDEX))                                                            (NUMBER-ZAPPED 0))                                                           ((OR (= INDEX END)                                                                (= NUMBER-ZAPPED COUNT))                                                            (REVERSE (CDR HANDLE)))                                                           (COND                                                              ((\, PRED)                                                               (RPLACD PREVIOUS (CDR CURRENT))                                                               (INCF NUMBER-ZAPPED))                                                              (T (CL:POP PREVIOUS)))))))(DEFMACRO NORMAL-MUMBLE-DELETE NIL (BQUOTE (MUMBLE-DELETE (CL:IF TEST-NOT                                                                 (NOT (FUNCALL TEST-NOT ITEM                                                                             (FUNCALL KEY                                                                                    (AREF SEQUENCE                                                                                           INDEX))))                                                                 (FUNCALL TEST ITEM                                                                        (FUNCALL KEY (AREF SEQUENCE                                                                                            INDEX)))))                                          ))(DEFMACRO NORMAL-MUMBLE-DELETE-FROM-END NIL (BQUOTE (MUMBLE-DELETE-FROM-END                                                     (CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT ITEM                                                                                 (FUNCALL KEY                                                                                         THIS-ELEMENT)                                                                                 ))                                                            (FUNCALL TEST ITEM (FUNCALL KEY                                                                                       THIS-ELEMENT)))                                                     )))(DEFMACRO NORMAL-LIST-DELETE NIL (QUOTE (LIST-DELETE (CL:IF TEST-NOT                                                            (NOT (FUNCALL TEST-NOT ITEM                                                                        (FUNCALL KEY (CAR CURRENT))))                                                            (FUNCALL TEST ITEM (FUNCALL KEY                                                                                      (CAR CURRENT)))                                                            ))))(DEFMACRO NORMAL-LIST-DELETE-FROM-END NIL (QUOTE (LIST-DELETE-FROM-END                                                  (CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT ITEM                                                                              (FUNCALL KEY                                                                                     (CAR CURRENT))))                                                         (FUNCALL TEST ITEM (FUNCALL KEY (CAR CURRENT                                                                                              )))))))(DEFUN CL:DELETE (ITEM SEQUENCE &KEY FROM-END (TEST (FUNCTION EQL))                       TEST-NOT                       (START 0)                       END                       (COUNT MOST-POSITIVE-FIXNUM)                       (KEY (FUNCTION IDENTITY))                       &AUX                       (LENGTH (CL:LENGTH SEQUENCE)))     "Returns a sequence formed by destructively removing the specified Item from the given sequence."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (NORMAL-LIST-DELETE-FROM-END)                                 (NORMAL-LIST-DELETE))          (CL:IF FROM-END (NORMAL-MUMBLE-DELETE-FROM-END)                 (NORMAL-MUMBLE-DELETE))))(DEFMACRO IF-MUMBLE-DELETE NIL (BQUOTE (MUMBLE-DELETE (FUNCALL PREDICATE (FUNCALL KEY                                                                                (AREF SEQUENCE INDEX)                                                                                )))))(DEFMACRO IF-MUMBLE-DELETE-FROM-END NIL (BQUOTE (MUMBLE-DELETE-FROM-END (FUNCALL PREDICATE                                                                               (FUNCALL KEY                                                                                       THIS-ELEMENT)))                                               ))(DEFMACRO IF-LIST-DELETE NIL (QUOTE (LIST-DELETE (FUNCALL PREDICATE (FUNCALL KEY (CAR CURRENT))))))(DEFMACRO IF-LIST-DELETE-FROM-END NIL (QUOTE (LIST-DELETE-FROM-END (FUNCALL PREDICATE                                                                          (FUNCALL KEY (CAR CURRENT))                                                                          ))))(DEFUN DELETE-IF (PREDICATE SEQUENCE &KEY FROM-END (START 0)                        (KEY (FUNCTION IDENTITY))                        END                        (COUNT MOST-POSITIVE-FIXNUM)                        &AUX                        (LENGTH (CL:LENGTH SEQUENCE))) "Returns a sequence formed by destructively removing the elements satisfying the specified predicate from the given sequence."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (IF-LIST-DELETE-FROM-END)                                 (IF-LIST-DELETE))          (CL:IF FROM-END (IF-MUMBLE-DELETE-FROM-END)                 (IF-MUMBLE-DELETE))))(DEFMACRO IF-NOT-MUMBLE-DELETE NIL (BQUOTE (MUMBLE-DELETE (NOT (FUNCALL PREDICATE                                                                      (FUNCALL KEY (AREF SEQUENCE                                                                                          INDEX)))))))(DEFMACRO IF-NOT-MUMBLE-DELETE-FROM-END NIL (BQUOTE (MUMBLE-DELETE-FROM-END                                                     (NOT (FUNCALL PREDICATE (FUNCALL KEY                                                                                     THIS-ELEMENT))))))(DEFMACRO IF-NOT-LIST-DELETE NIL (QUOTE (LIST-DELETE (FUNCALL PREDICATE (FUNCALL KEY (CAR CURRENT))))                                        ))(DEFMACRO IF-NOT-LIST-DELETE-FROM-END NIL (QUOTE (LIST-DELETE-FROM-END (FUNCALL PREDICATE                                                                              (FUNCALL KEY                                                                                     (CAR CURRENT))))                                                 ))(DEFUN DELETE-IF-NOT (PREDICATE SEQUENCE &KEY FROM-END (START 0)                            END                            (KEY (FUNCTION IDENTITY))                            (COUNT MOST-POSITIVE-FIXNUM)                            &AUX                            (LENGTH (CL:LENGTH SEQUENCE))) "Returns a sequence formed by destructively removing the elements not satisfying the specified Predicate from the given Sequence."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (IF-NOT-LIST-DELETE-FROM-END)                                 (IF-NOT-LIST-DELETE))          (CL:IF FROM-END (IF-NOT-MUMBLE-DELETE-FROM-END)                 (IF-NOT-MUMBLE-DELETE))))(DEFMACRO MUMBLE-REMOVE-MACRO (BUMP LEFT BEGIN FINISH RIGHT PRED)   (BQUOTE (CL:DO ((INDEX (\, BEGIN)                          ((\, BUMP)                           INDEX))                   (RESULT (CL:DO ((INDEX (\, LEFT)                                          ((\, BUMP)                                           INDEX))                                   (RESULT (MAKE-SEQUENCE-LIKE SEQUENCE LENGTH)))                                  ((= INDEX (\, BEGIN))                                   RESULT)                                  (SETF (AREF RESULT INDEX)                                        (AREF SEQUENCE INDEX))))                   (NEW-INDEX (\, BEGIN))                   (NUMBER-ZAPPED 0)                   (THIS-ELEMENT))                  ((OR (= INDEX (\, FINISH))                       (= NUMBER-ZAPPED COUNT))                   (CL:DO ((INDEX INDEX ((\, BUMP)                                         INDEX))                           (NEW-INDEX NEW-INDEX ((\, BUMP)                                                 NEW-INDEX)))                          ((= INDEX (\, RIGHT))                           (SHRINK-VECTOR RESULT NEW-INDEX))                          (SETF (AREF RESULT NEW-INDEX)                                (AREF SEQUENCE INDEX))))                  (LET ((THIS-ELEMENT (AREF SEQUENCE INDEX)))                       (COND                          ((\, PRED)                           (SETF (AREF RESULT NEW-INDEX)                                 THIS-ELEMENT)                           (SETQ NEW-INDEX ((\, BUMP)                                            NEW-INDEX)))                          (T (INCF NUMBER-ZAPPED)))))))(DEFMACRO MUMBLE-REMOVE (PRED) (BQUOTE (MUMBLE-REMOVE-MACRO 1+ 0 START END LENGTH (\, PRED))))(DEFMACRO MUMBLE-REMOVE-FROM-END (PRED) (BQUOTE (LET ((SEQUENCE (COPY-SEQ SEQUENCE)))                                                     (MUMBLE-DELETE-FROM-END (NOT (\, PRED))))))(DEFMACRO LIST-REMOVE-MACRO (PRED REVERSE?)   (BQUOTE (LET* ((\,@ (CL:WHEN REVERSE? (QUOTE ((SEQUENCE (REVERSE SEQUENCE))))))                  (SPLICE (LIST NIL))                  (RESULTS (CL:DO ((INDEX 0 (1+ INDEX))                                   (BEFORE-START SPLICE))                                  ((= INDEX START)                                   BEFORE-START)                                  (SETQ SPLICE (CDR (RPLACD SPLICE (CONS (CL:POP SEQUENCE)                                                                         NIL)))))))                 (CL:DO ((INDEX START (1+ INDEX))                         (THIS-ELEMENT)                         (NUMBER-ZAPPED 0))                        ((OR (= INDEX END)                             (= NUMBER-ZAPPED COUNT))                         (CL:DO ((INDEX INDEX (1+ INDEX)))                                ((NULL SEQUENCE)                                 (\, (CL:IF REVERSE? (QUOTE (REVERSE (CDR RESULTS)))                                            (QUOTE (CDR RESULTS)))))                                (SETQ SPLICE (CDR (RPLACD SPLICE (CONS (CL:POP SEQUENCE)                                                                       NIL))))))                        (SETQ THIS-ELEMENT (CL:POP SEQUENCE))                        (CL:IF (\, PRED)                               (SETQ SPLICE (CDR (RPLACD SPLICE (CONS THIS-ELEMENT NIL))))                               (INCF NUMBER-ZAPPED))))))(DEFMACRO LIST-REMOVE (PRED) (BQUOTE (LIST-REMOVE-MACRO (\, PRED)                                            NIL)))(DEFMACRO LIST-REMOVE-FROM-END (PRED) (BQUOTE (LIST-REMOVE-MACRO (\, PRED)                                                     T)))(DEFMACRO NORMAL-MUMBLE-REMOVE NIL (BQUOTE (MUMBLE-REMOVE (CL:IF TEST-NOT (FUNCALL TEST-NOT ITEM                                                                                 (FUNCALL KEY                                                                                         THIS-ELEMENT)                                                                                 )                                                                 (NOT (FUNCALL TEST ITEM                                                                             (FUNCALL KEY                                                                                     THIS-ELEMENT)))))                                          ))(DEFMACRO NORMAL-MUMBLE-REMOVE-FROM-END NIL (BQUOTE (MUMBLE-REMOVE-FROM-END                                                     (CL:IF TEST-NOT (FUNCALL TEST-NOT ITEM                                                                            (FUNCALL KEY THIS-ELEMENT                                                                                   ))                                                            (NOT (FUNCALL TEST ITEM (FUNCALL KEY                                                                                          THIS-ELEMENT                                                                                           )))))))(DEFMACRO NORMAL-LIST-REMOVE NIL (BQUOTE (LIST-REMOVE (CL:IF TEST-NOT (FUNCALL TEST-NOT ITEM                                                                             (FUNCALL KEY                                                                                     THIS-ELEMENT))                                                             (NOT (FUNCALL TEST ITEM (FUNCALL KEY                                                                                          THIS-ELEMENT                                                                                            )))))))(DEFMACRO NORMAL-LIST-REMOVE-FROM-END NIL (BQUOTE (LIST-REMOVE-FROM-END                                                   (CL:IF TEST-NOT (FUNCALL TEST-NOT ITEM                                                                          (FUNCALL KEY THIS-ELEMENT))                                                          (NOT (FUNCALL TEST ITEM (FUNCALL KEY                                                                                          THIS-ELEMENT                                                                                         )))))))(DEFUN CL:REMOVE (ITEM SEQUENCE &KEY FROM-END (TEST (FUNCTION EQL))                       TEST-NOT                       (START 0)                       END                       (COUNT MOST-POSITIVE-FIXNUM)                       (KEY (FUNCTION IDENTITY))                       &AUX                       (LENGTH (CL:LENGTH SEQUENCE)))        (* raf " 3-Dec-85 23:31")   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (NORMAL-LIST-REMOVE-FROM-END)                                 (NORMAL-LIST-REMOVE))          (CL:IF FROM-END (NORMAL-MUMBLE-REMOVE-FROM-END)                 (NORMAL-MUMBLE-REMOVE))))(DEFMACRO IF-MUMBLE-REMOVE NIL (BQUOTE (MUMBLE-REMOVE (NOT (FUNCALL PREDICATE (FUNCALL KEY                                                                                      THIS-ELEMENT))))                                      ))(DEFMACRO IF-MUMBLE-REMOVE-FROM-END NIL (BQUOTE (MUMBLE-REMOVE-FROM-END (NOT (FUNCALL PREDICATE                                                                                    (FUNCALL KEY                                                                                          THIS-ELEMENT                                                                                           ))))))(DEFMACRO IF-LIST-REMOVE NIL (BQUOTE (LIST-REMOVE (NOT (FUNCALL PREDICATE (FUNCALL KEY THIS-ELEMENT))                                                       ))))(DEFMACRO IF-LIST-REMOVE-FROM-END NIL (BQUOTE (LIST-REMOVE-FROM-END (NOT (FUNCALL PREDICATE                                                                                (FUNCALL KEY                                                                                        THIS-ELEMENT))                                                                         ))))(DEFUN REMOVE-IF (PREDICATE SEQUENCE &KEY FROM-END (START 0)                        END                        (COUNT MOST-POSITIVE-FIXNUM)                        (KEY (FUNCTION IDENTITY))                        &AUX                        (LENGTH (CL:LENGTH SEQUENCE)))       "Returns a copy of sequence with elements such that predicate(element) is non-null are removed"   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (IF-LIST-REMOVE-FROM-END)                                 (IF-LIST-REMOVE))          (CL:IF FROM-END (IF-MUMBLE-REMOVE-FROM-END)                 (IF-MUMBLE-REMOVE))))(DEFMACRO IF-NOT-MUMBLE-REMOVE NIL (BQUOTE (MUMBLE-REMOVE (FUNCALL PREDICATE (FUNCALL KEY                                                                                     THIS-ELEMENT)))))(DEFMACRO IF-NOT-MUMBLE-REMOVE-FROM-END NIL (BQUOTE (MUMBLE-REMOVE-FROM-END (FUNCALL PREDICATE                                                                                   (FUNCALL KEY                                                                                          THIS-ELEMENT                                                                                          )))))(DEFMACRO IF-NOT-LIST-REMOVE NIL (BQUOTE (LIST-REMOVE (FUNCALL PREDICATE (FUNCALL KEY THIS-ELEMENT)))                                        ))(DEFMACRO IF-NOT-LIST-REMOVE-FROM-END NIL (BQUOTE (LIST-REMOVE-FROM-END (FUNCALL PREDICATE                                                                               (FUNCALL KEY                                                                                       THIS-ELEMENT)))                                                 ))(DEFUN REMOVE-IF-NOT (PREDICATE SEQUENCE &KEY FROM-END (START 0)                            END                            (COUNT MOST-POSITIVE-FIXNUM)                            (KEY (FUNCTION IDENTITY))                            &AUX                            (LENGTH (CL:LENGTH SEQUENCE)))           "Returns a copy of sequence with elements such that predicate(element) is null are removed"   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (IF-NOT-LIST-REMOVE-FROM-END)                                 (IF-NOT-LIST-REMOVE))          (CL:IF FROM-END (IF-NOT-MUMBLE-REMOVE-FROM-END)                 (IF-NOT-MUMBLE-REMOVE))))(DEFUN LIST-REMOVE-DUPLICATES* (LIST TEST TEST-NOT START END KEY FROM-END)   (LET* ((RESULT (LIST NIL))          (SPLICE RESULT)          (CURRENT LIST))         (CL:DO ((INDEX 0 (1+ INDEX)))                ((= INDEX START))                (SETQ SPLICE (CDR (RPLACD SPLICE (LIST (CAR CURRENT)))))                (CL:POP CURRENT))                            (* "RESULT now holds the head of the list up to, but not including start. SPLICE points to the next cell to be RPLACD'ed. CURRENT is the tail to be processed.")         (CL:DO ((SUBLIST (CDR SPLICE))                 (INDEX START (1+ INDEX)))                ((OR (AND END (>= INDEX END))                     (ENDP CURRENT)))                (CL:UNLESS (CL:IF FROM-END (CL:MEMBER (FUNCALL KEY (CAR CURRENT))                                                  (NTHCDR START (CDR RESULT))                                                  :TEST TEST :TEST-NOT TEST-NOT :KEY KEY)                                  (CL:DO ((IT (FUNCALL KEY (CAR CURRENT)))                                          (L (CDR CURRENT)                                             (CDR L))                                          (I (1+ INDEX)                                             (1+ I)))                                         ((OR (ENDP L)                                              (>= I END))                                          NIL)                                         (CL:WHEN (CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT IT                                                                              (FUNCALL KEY                                                                                     (CAR L))))                                                         (FUNCALL TEST IT (FUNCALL KEY (CAR L))))                                                (RETURN T))))                       (SETQ SPLICE (CDR (RPLACD SPLICE (LIST (CAR CURRENT))))))                (CL:POP CURRENT))         (RPLACD SPLICE CURRENT)         (CDR RESULT)))(DEFUN VECTOR-REMOVE-DUPLICATES* (VECTOR TEST TEST-NOT START END KEY FROM-END &OPTIONAL                                        (LENGTH (CL:LENGTH VECTOR)))   (DECLARE (TYPE VECTOR VECTOR))                            (* raf "17-Dec-85 22:38")   (LET ((RESULT (MAKE-SEQUENCE-LIKE VECTOR LENGTH))         (INDEX 0)         (JNDEX START))        (CL:DO NIL ((= INDEX START))               (SETF (AREF RESULT INDEX)                     (AREF VECTOR INDEX))               (INCF INDEX))        (CL:DO NIL ((= INDEX END))               (LET ((ELT (AREF VECTOR INDEX)))                    (COND                       ((NOT (CL:IF FROM-END                                    (CL:POSITION (FUNCALL KEY ELT)                                           RESULT :START START :END JNDEX :TEST TEST :TEST-NOT                                            TEST-NOT :KEY KEY)                                    (CL:POSITION (FUNCALL KEY ELT)                                           VECTOR :START (1+ INDEX)                                           :END END :TEST TEST :TEST-NOT TEST-NOT :KEY KEY)))                        (SETF (AREF RESULT JNDEX)                              ELT)                        (INCF JNDEX))))               (INCF INDEX))        (CL:DO NIL ((= INDEX LENGTH))               (SETF (AREF RESULT JNDEX)                     (AREF VECTOR INDEX))               (INCF INDEX)               (INCF JNDEX))        (SHRINK-VECTOR RESULT JNDEX)))(DEFUN REMOVE-DUPLICATES (SEQUENCE &KEY (TEST (FUNCTION EQL))                                TEST-NOT                                (START 0)                                FROM-END END (KEY (FUNCTION IDENTITY))                                &AUX                                (LENGTH (CL:LENGTH SEQUENCE))) "The elements of Sequence are examined, and if any two match, one is discarded.  The resulting sequence is returned."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (CL:WHEN SEQUENCE (LIST-REMOVE-DUPLICATES* SEQUENCE TEST TEST-NOT START END                                                    KEY FROM-END))          (VECTOR-REMOVE-DUPLICATES* SEQUENCE TEST TEST-NOT START END KEY FROM-END)))(DEFUN LIST-DELETE-DUPLICATES* (LIST TEST TEST-NOT KEY FROM-END START END)   (LET ((HANDLE (CONS NIL LIST)))        (CL:DO ((CURRENT (NTHCDR START LIST)                       (CDR CURRENT))                (PREVIOUS (NTHCDR START HANDLE))                (INDEX START (1+ INDEX)))               ((OR (= INDEX END)                    (NULL CURRENT))                (CDR HANDLE))               (CL:IF (CL:DO ((X (CL:IF FROM-END (NTHCDR (1+ START)                                                        HANDLE)                                        (CDR CURRENT))                                 (CDR X))                              (I (1+ INDEX)                                 (1+ I)))                             ((OR (NULL X)                                  (AND (NOT FROM-END)                                       (= I END))                                  (EQ X CURRENT))                              NIL)                             (CL:WHEN (CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT (FUNCALL KEY                                                                                    (CAR CURRENT))                                                                  (FUNCALL KEY (CAR X))))                                             (FUNCALL TEST (FUNCALL KEY (CAR CURRENT))                                                    (FUNCALL KEY (CAR X))))                                    (RETURN T)))                      (RPLACD PREVIOUS (CDR CURRENT))                      (CL:POP PREVIOUS)))))(DEFUN VECTOR-DELETE-DUPLICATES* (VECTOR TEST TEST-NOT KEY FROM-END START END &OPTIONAL                                        (LENGTH (CL:LENGTH VECTOR)))   (DECLARE (TYPE VECTOR VECTOR))                            (* raf "17-Dec-85 22:39")   (CL:DO ((INDEX START (1+ INDEX))           (JNDEX START))          ((= INDEX END)           (CL:DO ((INDEX INDEX (1+ INDEX))                   (JNDEX JNDEX (1+ JNDEX)))                  ((= INDEX LENGTH)                   (SHRINK-VECTOR VECTOR JNDEX)                   VECTOR)                  (SETF (AREF VECTOR JNDEX)                        (AREF VECTOR INDEX))))          (SETF (AREF VECTOR JNDEX)                (AREF VECTOR INDEX))          (CL:UNLESS (CL:POSITION (FUNCALL KEY (AREF VECTOR INDEX))                            VECTOR :KEY KEY :TEST TEST :TEST-NOT TEST-NOT :START (CL:IF FROM-END                                                                                         START                                                                                        (1+ INDEX))                            :END                            (CL:IF FROM-END JNDEX END))                 (INCF JNDEX))))(DEFUN DELETE-DUPLICATES (SEQUENCE &KEY (TEST (FUNCTION EQL))                                TEST-NOT                                (START 0)                                FROM-END END (KEY (FUNCTION IDENTITY))                                &AUX                                (LENGTH (CL:LENGTH SEQUENCE))) "The elements of Sequence are examined, and if any two match, one is discarded. The resulting sequence, which may be formed by destroying the given sequence, is returned."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SEQ-DISPATCH SEQUENCE (COND                             (SEQUENCE (LIST-DELETE-DUPLICATES* SEQUENCE TEST TEST-NOT KEY FROM-END                                               START END))                             (T NIL))          (VECTOR-DELETE-DUPLICATES* SEQUENCE TEST TEST-NOT KEY FROM-END START END)))(DEFMACRO SUBST-DISPATCH (PRED) (BQUOTE (SEQ-DISPATCH SEQUENCE                                               (CL:IF FROM-END (REVERSE (LIST-SUBSTITUTE*                                                                         (\, PRED)                                                                         NEW                                                                         (REVERSE SEQUENCE)                                                                         (- LENGTH END)                                                                         (- LENGTH START)                                                                         COUNT KEY TEST TEST-NOT OLD)                                                                      )                                                      (LIST-SUBSTITUTE* (\, PRED)                                                             NEW SEQUENCE START END COUNT KEY TEST                                                              TEST-NOT OLD))                                               (CL:IF FROM-END (VECTOR-SUBSTITUTE* (\, PRED)                                                                      NEW SEQUENCE -1 (1- LENGTH)                                                                      -1 LENGTH (1- END)                                                                      (1- START)                                                                      COUNT KEY TEST TEST-NOT OLD)                                                      (VECTOR-SUBSTITUTE* (\, PRED)                                                             NEW SEQUENCE 1 0 LENGTH LENGTH START END                                                              COUNT KEY TEST TEST-NOT OLD)))))(DEFUN LIST-SUBSTITUTE* (PRED NEW LIST START END COUNT KEY TEST TEST-NOT OLD)                                                              (* kbr: "31-Aug-85 20:01")   (LET* ((RESULT (LIST NIL))          (SPLICE RESULT)          (LIST LIST))                                       (* " Get a local list for a stepper."                                                              *)         (CL:DO ((INDEX 0 (1+ INDEX)))                ((= INDEX START))                (SETQ SPLICE (CDR (RPLACD SPLICE (LIST (CAR LIST)))))                (CL:POP LIST))                               (*               "SPLICE points to the place to append to, LIST is now the appropriate tail to work on.")         (CL:DO ((INDEX START (1+ INDEX)))                ((OR (AND END (= INDEX END))                     (ENDP LIST)                     (= COUNT 0)))                (LET ((ELT (CL:POP LIST)))                     (SETQ SPLICE                      (CDR (RPLACD SPLICE                                  (LIST (COND                                           ((ECASE PRED (NORMAL (CL:IF TEST-NOT                                                                       (NOT (FUNCALL TEST-NOT OLD                                                                                   (FUNCALL KEY ELT))                                                                            )                                                                       (FUNCALL TEST OLD                                                                              (FUNCALL KEY ELT))))                                                   (IF (FUNCALL TEST (FUNCALL KEY ELT)))                                                   (IF-NOT (NOT (FUNCALL TEST (FUNCALL KEY ELT)))))                                            (DECF COUNT)                                            NEW)                                           (T ELT))))))))         (RPLACD SPLICE LIST)         (CDR RESULT)))(DEFUN VECTOR-SUBSTITUTE* (PRED NEW SEQUENCE INCREMENTER LEFT RIGHT LENGTH START END COUNT KEY TEST                                 TEST-NOT OLD)                (* kbr: "31-Aug-85 20:01")   (LET ((RESULT (MAKE-SEQUENCE-LIKE SEQUENCE LENGTH))         (INDEX LEFT))        (CL:DO NIL ((= INDEX START))               (SETF (AREF RESULT INDEX)                     (AREF SEQUENCE INDEX))               (INCF INDEX INCREMENTER))        (CL:DO ((ELT))               ((OR (= INDEX END)                    (= COUNT 0)))               (SETQ ELT (AREF SEQUENCE INDEX))               (SETF (AREF RESULT INDEX)                     (COND                        ((CASE PRED (NORMAL (CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT OLD                                                                        (FUNCALL KEY ELT)))                                                   (FUNCALL TEST OLD (FUNCALL KEY ELT))))                               (IF (FUNCALL TEST (FUNCALL KEY ELT)))                               (IF-NOT (NOT (FUNCALL TEST (FUNCALL KEY ELT)))))                         (DECF COUNT)                         NEW)                        (T ELT)))               (INCF INDEX INCREMENTER))        (CL:DO NIL ((= INDEX RIGHT))               (SETF (AREF RESULT INDEX)                     (AREF SEQUENCE INDEX))               (INCF INDEX INCREMENTER))        RESULT))(DEFUN SUBSTITUTE (NEW OLD SEQUENCE &KEY FROM-END (TEST (FUNCTION EQL))                       TEST-NOT                       (START 0)                       (COUNT MOST-POSITIVE-FIXNUM)                       END                       (KEY (FUNCTION IDENTITY))                       &AUX                       (LENGTH (CL:LENGTH SEQUENCE))) "Returns a sequence of the same kind as Sequence with the same elements except that all elements that match Old are replaced with New."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (SUBST-DISPATCH (QUOTE NORMAL)))(DEFUN SUBSTITUTE-IF (NEW TEST SEQUENCE &KEY FROM-END (START 0)                          END                          (COUNT MOST-POSITIVE-FIXNUM)                          (KEY (FUNCTION IDENTITY))                          &AUX                          (LENGTH (CL:LENGTH SEQUENCE))) "Returns a sequence of the same kind as Sequence with the same elements except that all elements satisfying the Test are replaced with New."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (LET (TEST-NOT OLD)        (SUBST-DISPATCH (QUOTE IF))))(DEFUN SUBSTITUTE-IF-NOT (NEW TEST SEQUENCE &KEY FROM-END (START 0)                              END                              (COUNT MOST-POSITIVE-FIXNUM)                              (KEY (FUNCTION IDENTITY))                              &AUX                              (LENGTH (CL:LENGTH SEQUENCE))) "Returns a sequence of the same kind as Sequence with the same elements except that all elements not satisfying the Test are replaced with New."   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (LET (TEST-NOT OLD)        (SUBST-DISPATCH (QUOTE IF-NOT))))(DEFUN NLIST-SUBSTITUTE* (NEW OLD SEQUENCE TEST TEST-NOT START END COUNT KEY)   (CL:DO ((LIST (NTHCDR START SEQUENCE)                 (CDR LIST))           (INDEX START (1+ INDEX)))          ((OR (AND END (= INDEX END))               (ENDP LIST)               (= COUNT 0))           SEQUENCE)          (COND             ((CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT OLD (FUNCALL KEY (CAR LIST))))                     (FUNCALL TEST OLD (FUNCALL KEY (CAR LIST))))              (RPLACA LIST NEW)              (DECF COUNT)))))(DEFUN NVECTOR-SUBSTITUTE* (NEW OLD SEQUENCE INCREMENTER TEST TEST-NOT START END COUNT KEY)   (CL:DO ((INDEX START (+ INDEX INCREMENTER)))          ((OR (= INDEX END)               (= COUNT 0))           SEQUENCE)          (COND             ((CL:IF TEST-NOT (NOT (FUNCALL TEST-NOT OLD (FUNCALL KEY (AREF SEQUENCE INDEX))))                     (FUNCALL TEST OLD (FUNCALL KEY (AREF SEQUENCE INDEX))))              (SETF (AREF SEQUENCE INDEX)                    NEW)              (DECF COUNT)))))(DEFUN NSUBSTITUTE (NEW OLD SEQUENCE &KEY FROM-END (TEST (FUNCTION EQL))                        TEST-NOT END (COUNT MOST-POSITIVE-FIXNUM)                        (KEY (FUNCTION IDENTITY))                        (START 0)                        &KEY                        (LENGTH (CL:LENGTH SEQUENCE)))       (* raf "27-Jan-86 17:31")   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (LET ((INCREMENTER 1))        (CL:WHEN FROM-END (PSETQ START (1- END)                                 END                                 (1- START)                                 INCREMENTER -1))        (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (DREVERSE (NLIST-SUBSTITUTE* NEW OLD (DREVERSE                                                                                            SEQUENCE)                                                                TEST TEST-NOT START END COUNT KEY))                                      (NLIST-SUBSTITUTE* NEW OLD SEQUENCE TEST TEST-NOT START END                                              COUNT KEY))               (NVECTOR-SUBSTITUTE* NEW OLD SEQUENCE INCREMENTER TEST TEST-NOT START END COUNT KEY))))(DEFUN NLIST-SUBSTITUTE-IF* (NEW TEST SEQUENCE START END COUNT KEY)   (CL:DO ((LIST (NTHCDR START SEQUENCE)                 (CDR LIST))           (INDEX START (1+ INDEX)))          ((OR (AND END (= INDEX END))               (ENDP LIST)               (= COUNT 0))           SEQUENCE)          (COND             ((FUNCALL TEST (FUNCALL KEY (CAR LIST)))              (RPLACA LIST NEW)              (DECF COUNT)))))(DEFUN NVECTOR-SUBSTITUTE-IF* (NEW TEST SEQUENCE INCREMENTER START END COUNT KEY)   (CL:DO ((INDEX START (+ INDEX INCREMENTER)))          ((OR (= INDEX END)               (= COUNT 0))           SEQUENCE)          (COND             ((FUNCALL TEST (FUNCALL KEY (AREF SEQUENCE INDEX)))              (SETF (AREF SEQUENCE INDEX)                    NEW)              (DECF COUNT)))))(DEFUN NSUBSTITUTE-IF (NEW TEST SEQUENCE &KEY FROM-END (START 0)                           END                           (COUNT MOST-POSITIVE-FIXNUM)                           (KEY (FUNCTION IDENTITY))                           &AUX                           (LENGTH (CL:LENGTH SEQUENCE)))    (* raf "27-Jan-86 17:31")   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (LET ((INCREMENTER 1))        (CL:WHEN FROM-END (PSETQ START (1- END)                                 END                                 (1- START)                                 INCREMENTER -1))        (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (DREVERSE (NLIST-SUBSTITUTE-IF* NEW TEST (DREVERSE                                                                                         SEQUENCE)                                                                START END COUNT KEY))                                      (NLIST-SUBSTITUTE-IF* NEW TEST SEQUENCE START END COUNT KEY))               (NVECTOR-SUBSTITUTE-IF* NEW TEST SEQUENCE INCREMENTER START END COUNT KEY))))(DEFUN NLIST-SUBSTITUTE-IF-NOT* (NEW TEST SEQUENCE START END COUNT KEY)   (CL:DO ((LIST (NTHCDR START SEQUENCE)                 (CDR LIST))           (INDEX START (1+ INDEX)))          ((OR (AND END (= INDEX END))               (ENDP LIST)               (= COUNT 0))           SEQUENCE)          (COND             ((NOT (FUNCALL TEST (FUNCALL KEY (CAR LIST))))              (RPLACA LIST NEW)              (DECF COUNT)))))(DEFUN NVECTOR-SUBSTITUTE-IF-NOT* (NEW TEST SEQUENCE INCREMENTER START END COUNT KEY)   (CL:DO ((INDEX START (+ INDEX INCREMENTER)))          ((OR (= INDEX END)               (= COUNT 0))           SEQUENCE)          (COND             ((NOT (FUNCALL TEST (FUNCALL KEY (AREF SEQUENCE INDEX))))              (SETF (AREF SEQUENCE INDEX)                    NEW)              (DECF COUNT)))))(DEFUN NSUBSTITUTE-IF-NOT (NEW TEST SEQUENCE &KEY FROM-END (START 0)                               END                               (COUNT MOST-POSITIVE-FIXNUM)                               (KEY (FUNCTION IDENTITY))                               &AUX                               (LENGTH (CL:LENGTH SEQUENCE)))                                                              (* raf "27-Jan-86 17:31")   (CL:UNLESS END (SETQ END LENGTH))   (CHECK-SUBSEQ SEQUENCE START END LENGTH)   (LET ((INCREMENTER 1))        (CL:WHEN FROM-END (PSETQ START (1- END)                                 END                                 (1- START)                                 INCREMENTER -1))        (SEQ-DISPATCH SEQUENCE (CL:IF FROM-END (DREVERSE (NLIST-SUBSTITUTE-IF-NOT* NEW TEST                                                                (DREVERSE SEQUENCE)                                                                START END COUNT KEY))                                      (NLIST-SUBSTITUTE-IF-NOT* NEW TEST SEQUENCE START END COUNT KEY                                             ))               (NVECTOR-SUBSTITUTE-IF-NOT* NEW TEST SEQUENCE INCREMENTER START END COUNT KEY))))(PUTPROPS CMLSEQMODIFY FILETYPE COMPILE-FILE)(PUTPROPS CMLSEQMODIFY COPYRIGHT ("Xerox Corporation" 1986))(DECLARE: DONTCOPY  (FILEMAP (NIL)))STOP