2.6 "list-utilities"

(include-book "list-utilities" :dir :teachpacks)

Documentation under construction.

;;===== Module: list-utilities =================================================

;;

;; Defining

;;   (break-at-nth n xs)

;;   (break-at-set delimiters xs)

;;   (break-at delimiter xs)

;;   (take-to-set delimiters xs)

;;   (take-to delimiter xs)

;;   (drop-set delimiters xs)

;;   (drop-past delimiter xs)

;;     = (drop-thru delimiter xs)

;;   (drop-past-n-delimiters n delimiter xs)

;;     = (drop-thru-n-delimiters n delimiter xs)

;;   (packets-set delimiters xs)

;;   (packets delimiter xs)

;;   (tokens delimiters xs)

;;   (replicate n x)

;;   (pad-left width pad xs)

;;   (chrs->str character-list)

;;   (str->chrs string)

;;   (words str)

;;==============================================================================

 

;;====== Function: (break-at-nth n xs) =========================================

;;

;;  Returns list with two elements

;;    (1) the first n elements of xs

;;    (2) xs without its first n elements

;;

;;  Pre : (and (integerp n)

;;             (>= n 0)

;;             (true-listp xs))

;;  Post: (and (= (min n (length xs))

;;                (length (car (break-at-nth n xs))))

;;             (equal (append (car  (break-at-nth n xs))

;;                            (cadr (break-at-nth n xs)))

;;                    xs))

;;==============================================================================

 

;;====== Function: (break-at-set delimiters xs) ================================

;;

;;  Returns list with two elements

;;    (1) the portion of xs that precedes its first element that is a

;;        member of the list delimiters

;;    (2) the portion of xs beginning with its first element that is a

;;        member of the list delimiters

;;

;;  Pre : (and (true-listp delimiters)

;;             (true-listp xs))

;;  Post: (and (equal (append (car (break-at-set ds xs))

;;                            (cadr (break-at-set ds xs)))

;;                    xs)

;;             (implies (consp (cadr (break-at-set ds xs)))

;;                      (member-equal (caadr (break-at-set ds xs)) ds)))

;;             (implies (member-equal d ds)

;;                      (not (member-equal d (car (break-at-set ds xs))))))

;;==============================================================================

 

;;====== Function: (break-at x xs) =============================================

;;

;;  Returns list with two elements

;;    (1) the portion of xs that precedes the first element equal to x

;;    (2) the portion of xs beginning with the first element equal to x

;;

;;  Pre : (true-listp xs)

;;  Post: (and (equal (append (car (break-at x xs)) (cadr (break-at x xs)))

;;                    xs)

;;             (implies (consp (cadr (break-at d xs)))

;;                      (member-equal (caadr (break-at-set d xs)) ds)))

;;             (implies (member-equal d ds)

;;                      (not (member-equal d (car (break-at d xs))))))

;;==============================================================================

 

;;====== Function: (take-to-set delimiters xs) =================================

;;

;;  Returns the part of xs that precedes its first element that is a member

;;  of the list delimiters

;;

;;  Pre : (and (true-listp delimiters)

;;             (true-listp xs))

;;  Post: (and (true-listp (take-to-set delimiters xs))

;;             (implies (member-equal d delimiters)

;;                      (not (member-equal d (take-to-set delimiters xs))))

;;             (implies (and (equal (append (take-to-set delimiters xs)

;;                                          ys)

;;                                  xs)

;;                           (consp ys))

;;                      (member-equal (car ys) delimiters)))

;;==============================================================================

 

;;====== Function: (take-to x xs) ==============================================

;;

;;  Returns the part of xs that precedes the first element equal to x

;;

;;  Pre : (true-listp xs)

;;  Post: (and (true-listp (take-to x xs))

;;             (not (member-equal x (take-to x xs)))

;;             (implies (member-equal x xs)

;;                      (equal (append (take-to x xs)

;;                                     (list x)

;;                                     (drop-past x xs))))

;;             (implies (not (member-equal x xs))

;;                      (equal (take-to x xs) xs)))

;;==============================================================================

 

;;===== Function: (drop-set delimiters xs) =====================================

;;

;;  Returns the part of xs that follows the maximal contiguous block of

;;  delimiters beginning at the first element of xs

;;

;;  Pre:  (true-listp xs)

;;  Post: (and (true-listp (drop-set delimiters xs))

;;             (implies (consp (drop-set delimiters xs))

;;                      (not (member (car (drop-set delimiters xs))

;;                                   delimiters)))

;;             (implies (and (equal (append ds (drop-set delimiters xs))

;;                                  xs)

;;                           (member d ds))

;;                      (member d delimiters)))

;;==============================================================================

 

;;===== Function: (drop-past delimiter xs) =====================================

;;

;;  Returns the part of xs that follows the first element equal to x

;;

;;  Pre:  (true-listp xs)

;;  Post: (and (true-listp (drop-past delimiter xs))

;;             (implies (member-equal x xs)

;;                      (equal (append (take-to delimiter xs)

;;                                     (list x)

;;                                     (drop-past delimiter xs))))

;;             (implies (not (member-equal delimiter xs))

;;                      (equal (drop-past delimiter xs) nil)))

;;==============================================================================

 

;;====== Function: (drop-past-n-delimiters n delimiter xs) =====================

;;

;;  Returns the part of xs that follows the first n occurances of x

;;

;;  Pre : (and (integerp n) (>= n 0) (true-listp xs))

;;  Post: (true-listp (drop-past-n-delimiters n d xs)) ; and some other stuff

;;==============================================================================

 

;;====== Function: (packets-set delimiters xs) ==================================

;;

;;  Parcels a list into a list of lists

;;  Contiguous sequences from a specified set of delimiters

;;  marks separations between packets

;;

;;  Pre : (and (true-listp delimiters) (true-listp xs))

;;  Post: (true-list-listp (packets-set ds xs))

;;        and a bunch of other stuff

;;==============================================================================

 

 

;;====== Function: (packets delimiter xs) ======================================

;;

;;  Parcels a list into a list of lists

;;  A specified delimiter marks separations between packets in the given list

;;

;;  Pre : (true-listp xs)

;;  Post: (and (true-list-listp (packets d xs))

;;             (implies (and (integerp n) (>= n 0))

;;                      (equal (nth n (packets d xs))

;;                             (take-to d (drop-past-n-delimiters n d xs)))))

;;==============================================================================

 

;;====== Function: (tokens delimiters xs) ======================================

;;

;;  Parcels a list into a list of tokens

;;  Tokens are the sublists residing between maximally contiguous

;;  sequences of delimiters

;;

;;  Pre : (and (true-listp delimiters) (true-listp xs))

;;  Post: (true-list-listp (tokens ds xs))

;;        and a bunch of other stuff

;;==============================================================================

 

;;===== Function: (rep-append n x xs) ==========================================

;;

;;  Appends xs to a list consisting of n copies of x

;;

;;  Pre : (and (integerp n)

;;             (>= n 0)

;;             (true-listp xs))

;;  Post: (and (implies (member-equal y (take n (rep-append n x)))

;;                      (equal y x))

;;             (equal (length (rep-append n x xs))

;;                    (+ (length xs) n))

;;             (equal (nthcdr n (rep-append n x xs))

;;                    xs))

;;==============================================================================

 

;;===== Function: (replicate n x) =================================================

;;

;;  Delivers a list consisting of n copies of x

;;

;;  Pre : (and (integerp n)

;;             (>= n 0))

;;  Post: (and (implies (member-equal y (replicate n x))

;;                      (equal y x))

;;             (equal (length (replicate n x)) n))

;;==============================================================================

 

;;===== Function: (pad-left w p xs) ============================================

;;

;;  Pads appends xs to copies of p to make the resulting list have w elements

;;  Note: Delivers xs, as is, if xs has w or more elements

;;

;;  Pre : (and (integerp w)

;;             (>= w 0)

;;             (listp xs))

;;  Post: (and (equal (length (pad-left w p xs))

;;                    (max w (length xs)))

;;             (implies (member-equal x (take (max 0 (- w (length xs))) xs))

;;                      (equal x p)))

;;==============================================================================

 

;;====== Function: (chrs->str chrs) ============================================

;;

;;  Converts list of characters to string

;;

;;  Pre : (character-listp chrs)

;;  Post: (stringp (chrs->str chrs))

;;==============================================================================

 

;;====== Function: (str->chrs str) =============================================

;;

;;  Converts string to list of characters

;;

;;  Pre : (stringp str)

;;  Post: (character-listp (str->chrs str))

;;==============================================================================

 

;;====== Function: (words str) =================================================

;;

;;  Parcels a string into a list of words

;;  Words are the sublists residing between maximally contiguous

;;  spans of whitespace

;;

;;  Pre : (stringp str)

;;  Post: (string-listp (words str))

;;        and a bunch of other stuff

;;==============================================================================