(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)(FILECREATED "16-May-90 14:26:56" {DSK}<usr>local>lde>lispcore>sources>CMLSEQBASICS.;2 9043         changes to%:  (VARS CMLSEQBASICSCOMS)      previous date%: " 9-Oct-87 16:34:51" {DSK}<usr>local>lde>lispcore>sources>CMLSEQBASICS.;1)(* ; "Copyright (c) 1986, 1987, 1990 by Venue & Xerox Corporation.  All rights reserved.")(PRETTYCOMPRINT CMLSEQBASICSCOMS)(RPAQQ CMLSEQBASICSCOMS       ((DECLARE%: EVAL@COMPILE DONTCOPY (FILES CMLSEQCOMMON))        (FUNCTIONS CL:CONCATENATE CL:COPY-SEQ CL:ELT CL:LENGTH CL:MAKE-SEQUENCE CL:NREVERSE                CL:REVERSE CL:SUBSEQ %%SETELT)        (FUNCTIONS MAKE-SEQUENCE-OF-TYPE)        (SETFS CL:ELT CL:SUBSEQ)        (PROPS (CMLSEQBASICS FILETYPE))        (DECLARE%: EVAL@COMPILE DONTCOPY DONTEVAL@LOAD (LOCALVARS . T))))(DECLARE%: EVAL@COMPILE DONTCOPY (FILESLOAD CMLSEQCOMMON))(CL:DEFUN CL:CONCATENATE (RESULT-TYPE &REST SEQUENCES)   [LET [(RESULT (MAKE-SEQUENCE-OF-TYPE RESULT-TYPE (LET ((CNT 0))                                                         (CL:DOLIST (SEQ SEQUENCES CNT)                                                             (SETQ CNT (+ CNT (CL:LENGTH SEQ))))]        (SEQ-DISPATCH RESULT [LET ((TAIL RESULT))                                  (CL:DOLIST (SEQUENCE SEQUENCES RESULT)                                      [SEQ-DISPATCH SEQUENCE (CL:DOLIST (ELEMENT SEQUENCE)                                                                 (RPLACA TAIL ELEMENT)                                                                 (SETQ TAIL (CDR TAIL)))                                             (CL:DOTIMES (I (VECTOR-LENGTH SEQUENCE))                                                 (RPLACA TAIL (CL:AREF SEQUENCE I))                                                 (SETQ TAIL (CDR TAIL)))])]               (LET ((INDEX 0))                    (CL:DOLIST (SEQUENCE SEQUENCES RESULT)                        [SEQ-DISPATCH SEQUENCE (CL:DOLIST (ELEMENT SEQUENCE)                                                   (CL:SETF (CL:AREF RESULT INDEX)                                                          ELEMENT)                                                   (SETQ INDEX (CL:1+ INDEX)))                               (CL:DOTIMES (I (VECTOR-LENGTH SEQUENCE))                                   (CL:SETF (CL:AREF RESULT INDEX)                                          (CL:AREF SEQUENCE I))                                   (SETQ INDEX (CL:1+ INDEX)))])])(CL:DEFUN CL:COPY-SEQ (SEQUENCE)   "Returns a copy of SEQUENCE which is EQUALP to SEQUENCE but not EQ."   [LET ((LENGTH (CL:LENGTH SEQUENCE)))        (SEQ-DISPATCH SEQUENCE (FORWARD-LIST-LOOP SEQUENCE 0 LENGTH (INDEX CURRENT COPY TAIL)                                      COPY                                      (COLLECT-ITEM CURRENT COPY TAIL))               (LET [(COPY (MAKE-VECTOR LENGTH :ELEMENT-TYPE (CL:ARRAY-ELEMENT-TYPE SEQUENCE]                    (COPY-VECTOR-SUBSEQ SEQUENCE 0 LENGTH COPY 0 LENGTH])(CL:DEFUN CL:ELT (SEQUENCE INDEX)                                                         (* amd " 5-Jun-86 17:48")   (CL:IF (NOT (< -1 INDEX (CL:LENGTH SEQUENCE)))       (CL:ERROR 'INDEX-BOUNDS-ERROR :NAME SEQUENCE :INDEX INDEX))   (SEQ-DISPATCH SEQUENCE (CL:NTH INDEX SEQUENCE)          (CL:AREF SEQUENCE INDEX)))(CL:DEFUN CL:LENGTH (SEQUENCE)   (SEQ-DISPATCH SEQUENCE [LET ((SIZE 0)                                (REST SEQUENCE))                               (CL:LOOP (CL:IF (NOT (CL:CONSP REST))                                               (RETURN SIZE))                                      (SETQ REST (CDR REST))                                      (SETQ SIZE (CL:1+ SIZE]          (VECTOR-LENGTH SEQUENCE)))(CL:DEFUN CL:MAKE-SEQUENCE (TYPE LENGTH &KEY (INITIAL-ELEMENT NIL INITIAL-ELEMENT-P))   "Make a sequnce of the specified type"   (CL:IF (EQ TYPE 'LIST)       (CL:MAKE-LIST LENGTH :INITIAL-ELEMENT INITIAL-ELEMENT)       (LET ((VECTOR (MAKE-SEQUENCE-OF-TYPE TYPE LENGTH)))            (CL:IF INITIAL-ELEMENT-P (FILL-VECTOR-SUBSEQ VECTOR 0 LENGTH INITIAL-ELEMENT))            VECTOR)))(CL:DEFUN CL:NREVERSE (SEQUENCE)   "Returns a sequence of the same elements in reverse order (the argument is destroyed)."   [SEQ-DISPATCH SEQUENCE [LET ((REST SEQUENCE)                                LIST-HEAD RESULT)                               (CL:LOOP (CL:IF (NOT (CL:CONSP (SETQ LIST-HEAD REST)))                                               (RETURN RESULT))                                      (SETQ REST (CDR REST))                                      (SETQ RESULT (RPLACD LIST-HEAD RESULT]          (LET ((LENGTH (VECTOR-LENGTH SEQUENCE)))               (CL:DO ((LEFT-INDEX 0 (CL:1+ LEFT-INDEX))                       (RIGHT-INDEX (CL:1- LENGTH)                              (CL:1- RIGHT-INDEX))                       (HALF-LENGTH (LRSH LENGTH 1)))                      ((EQL LEFT-INDEX HALF-LENGTH)                       SEQUENCE)                   (CL:ROTATEF (CL:AREF SEQUENCE LEFT-INDEX)                          (CL:AREF SEQUENCE RIGHT-INDEX)))])(CL:DEFUN CL:REVERSE (SEQUENCE)   "Returns a new sequence containing the same elements but in reverse order."   [SEQ-DISPATCH SEQUENCE [LET ((REST SEQUENCE)                                RESULT)                               (CL:LOOP (CL:IF (NOT (CL:CONSP REST))                                               (RETURN RESULT))                                      (CL:PUSH (CAR REST)                                             RESULT)                                      (SETQ REST (CDR REST]          (LET ((LENGTH (VECTOR-LENGTH SEQUENCE)))               (CL:DO ((RESULT (MAKE-VECTOR LENGTH :ELEMENT-TYPE (CL:ARRAY-ELEMENT-TYPE SEQUENCE)))                       (FORWARD-INDEX 0 (CL:1+ FORWARD-INDEX))                       (BACKWARD-INDEX (CL:1- LENGTH)                              (CL:1- BACKWARD-INDEX)))                      ((EQL FORWARD-INDEX LENGTH)                       RESULT)                   (CL:SETF (CL:AREF RESULT FORWARD-INDEX)                          (CL:AREF SEQUENCE BACKWARD-INDEX)))])(CL:DEFUN CL:SUBSEQ (SEQUENCE START &OPTIONAL END)   [LET ((LENGTH (CL:LENGTH SEQUENCE)))        (CL:IF (NULL END)               (SETQ END LENGTH))        (CHECK-SUBSEQ SEQUENCE START END LENGTH)        (SEQ-DISPATCH SEQUENCE (FORWARD-LIST-LOOP SEQUENCE START END (INDEX CURRENT COPY TAIL)                                      COPY                                      (COLLECT-ITEM CURRENT COPY TAIL))               (LET [(COPY (MAKE-VECTOR (- END START)                                  :ELEMENT-TYPE                                  (CL:ARRAY-ELEMENT-TYPE SEQUENCE]                    (COPY-VECTOR-SUBSEQ SEQUENCE START END COPY 0])(CL:DEFUN %%SETELT (SEQUENCE INDEX NEWVAL)   (CL:IF (NOT (< -1 INDEX (CL:LENGTH SEQUENCE)))       (CL:ERROR 'INDEX-BOUNDS-ERROR :NAME SEQUENCE :INDEX INDEX))   (SEQ-DISPATCH SEQUENCE (CL:SETF (CL:NTH INDEX SEQUENCE)                                 NEWVAL)          (CL:SETF (CL:AREF SEQUENCE INDEX)                 NEWVAL)))(CL:DEFUN MAKE-SEQUENCE-OF-TYPE (TYPE LENGTH)   [LET ((BROAD-TYPE (TYPE-SPECIFIER TYPE)))        (CL:IF (EQ BROAD-TYPE 'LIST)            (CL:MAKE-LIST LENGTH)            [LET [(ELEMENT-TYPE (CASE BROAD-TYPE                                    ((CL:SIMPLE-STRING STRING) 'CL:STRING-CHAR)                                    ((CL:SIMPLE-BIT-VECTOR CL:BIT-VECTOR) 'BIT)                                    (CL:SIMPLE-VECTOR T)                                    ((CL:ARRAY CL:VECTOR CL:SIMPLE-ARRAY)                                        (CL:IF (CL:CONSP TYPE)                                           (LET ((ELT-TYPE (CADR TYPE)))                                                (CL:IF [AND ELT-TYPE (NOT (EQ ELT-TYPE 'CL:*]                                                    ELT-TYPE                                                    T))                                           T)))]                 (CL:IF ELEMENT-TYPE                     (MAKE-VECTOR LENGTH :ELEMENT-TYPE ELEMENT-TYPE)                     (LET ((EXPANDER (CL::TYPE-EXPANDER BROAD-TYPE)))                          (CL:IF EXPANDER                              (MAKE-SEQUENCE-OF-TYPE (CL::TYPE-EXPAND TYPE EXPANDER)                                     LENGTH)                              (CL:ERROR "~S is a bad type specifier for sequences." TYPE))))])])(CL:DEFSETF CL:ELT %%SETELT)(CL:DEFSETF CL:SUBSEQ (SEQUENCE START &OPTIONAL END) (NEW-SEQUENCE)   `(PROGN (CL:REPLACE ,SEQUENCE ,NEW-SEQUENCE :START1 ,START :END1 ,END)           ,NEW-SEQUENCE))(PUTPROPS CMLSEQBASICS FILETYPE CL:COMPILE-FILE)(DECLARE%: EVAL@COMPILE DONTCOPY DONTEVAL@LOAD (DECLARE%: DOEVAL@COMPILE DONTCOPY(LOCALVARS . T)))(PUTPROPS CMLSEQBASICS COPYRIGHT ("Venue & Xerox Corporation" 1986 1987 1990))(DECLARE%: DONTCOPY  (FILEMAP (NIL)))STOP