##### 1.4.8Lists

List functions can also be found in the sections on Association Lists, Sets, and Sequences.

 (cons x y)
Creates a new pair containing x and y.

Examples:

 > (cons 1 nil) '(1) > (cons 2 (cons 3 nil)) '(2 3) > (cons 4 5) '(4 . 5)

 (consp x)
Returns true when x is a pair.

Examples:

 > (consp nil) '() > (consp 5) '() > (consp "string") '() > (consp (cons 1 nil)) 't > (consp '(1 2 3)) 't

 (car x) → t x : (or (consp x) (equal x nil))
Returns the first element of a cons-pair, or nil for nil.

Examples:

 > (car '(1 2 4 6)) 1 > (car nil) '()

 (cdr x) → t x : (or (consp x) (equal x nil))
Returns the second element of a cons-pair, or nil for nil.

Examples:

 > (cdr '(1 2 4 6)) '(2 4 6) > (cdr nil) '()

 (append lst ...)
Concatenates all the elements in the given lists into one list. This a macro that expands into calls of the function binary-append.

Examples:

 > (append nil nil) '() > (append nil (list 1 2)) '(1 2) > (append (list 1 2) (list 3 4)) '(1 2 3 4)

 (binary-append x y) → t x : (true-listp x) y : t
Concatenates two lists. Returns a new list containing all the items from x followed by all the items from y.

Examples:

 > (binary-append (list 1 2 3) (list 4 5 6)) '(1 2 3 4 5 6) > (binary-append (list 1 2 3) 4) '(1 2 3 . 4) > (binary-append 5 "<-error") self-contract violation: x = 5 y = "<-error" contract on binary-append from (region Dracula Program), blaming (region Dracula Program) contract: (xargs :guard (true-listp x)) at: /Users/cce/git/planet/dracula/lang/primitive-procedures/acl2 -prims.rkt

 (mv x ...)
Form for returning multiple values. This is like list, but with the restriction that if a function returns using mv, then it must always return the same number of values.

Example:

 > (mv 1 2 3 4) '(1 2 3 4)

 (revappend x y) → t x : (true-listp x) y : t
append the reverse of x to y.

Examples:

 > (revappend nil nil) '() > (revappend nil (list 1 2)) '(1 2) > (revappend (list 1 2) (list 3 4)) '(2 1 3 4) > (revappend (list 1 2) 3) '(2 1 . 3)

 (list elem ...)
Creates a new true list containing all the given elements.

Examples:

 > (list) '() > (list 1 2 3) '(1 2 3)

 (list* elem ... tail)
Uses cons to add each elem to tail.

Examples:

 > (list* 1 2 nil) '(1 2) > (list* 5 6 '(7 8 9)) '(5 6 7 8 9) > (list* 1 2 3) '(1 2 . 3)

 (atom-listp x) → t x : t
Reports whether x is a list of atoms.

Examples:

 > (atom-listp (list 2 3 4)) 't > (atom-listp (list (list 23 34) 45)) '()

 (character-listp x) → t x : t
Reports whether x is a list of characterp elements.

Examples:

 > (character-listp (list #\a #\b)) 't > (character-listp (list #\a "b")) '()

 (endp x) → t x : (or (consp lst) (equal x nil))
Same as atom, but with the guard that x is either a consp or is nil.

Examples:

 > (endp nil) 't > (endp (cons 2 nil)) '()

 (eqlable-listp x) → t x : t
Reports whether x is a list of eqlablep elements.

Examples:

 > (eqlable-listp nil) 't > (eqlable-listp (cons 4 nil)) 't > (eqlable-listp t) '()

 (integer-listp x) → t x : t
Reports whether x is a list of integerp elements.

Examples:

 > (integer-listp nil) 't > (integer-listp (list 24 -21 95)) 't > (integer-listp (list 53 44 "number")) '()

 (keyword-value-listp x) → t x : t
Reports whether x is of even length and every other element in the list satisfies keywordp.

Examples:

 > (keyword-value-listp (list :a 1 :b 2 :c 3)) 't > (keyword-value-listp (list 'a 1 'b 'c 3)) '()

 (listp x) → t x : t
Reports whether x is either a consp or nil.

Examples:

 > (listp nil) 't > (listp (cons 4 nil)) 't > (listp t) '()

 (null x) → t x : t
Returns true if x equals nil (using eq).

Examples:

 > (null nil) 't > (null (list 1 2 3)) '()

 (proper-consp x) → t x : t
Reports whether x is a proper (nil-terminated) nonempty list

Examples:

 > (proper-consp nil) '() > (proper-consp (list 1 2 3)) 't > (proper-consp (cons 1 2)) '()

 (rational-listp x) → t x : t
Reports whether x is a list of rationalp elements.

Examples:

 > (rational-listp (list 1 2/5 3)) 't > (rational-listp (list 1 2/5 "number")) '()

 (standard-char-listp x) → t x : t
Reports whether x is a list of standard-char-p elements.

Examples:

 > (standard-char-listp (list #\a #\b #\c)) 't > (standard-char-listp (list 1 2 3)) '()

 (string-listp x) → t x : t
Reports whether x is a list of stringp elements.

Examples:

 > (string-listp (list "ab" "cd" "ef")) 't > (string-listp (list 1 2 3)) '()

 (symbol-listp x) → t x : t
Reports whether x is a list of symbolp elements.

Examples:

 > (symbol-listp (list 'ab 'cd 'ef)) 't > (symbol-listp (list 1 2 3)) '()

 (true-list-listp x) → t x : t
Reports whether x is a list of true-listp elements.

Examples:

 > (true-list-listp (list 1 2 3 4 5)) '() > (true-list-listp '((1) (2) (3) (4) (5))) 't

 (true-listp x) → t x : t
Reports whether x is a proper nil-terminated list.

Examples:

 > (true-listp (list 1 2 3 4 5)) 't > (true-listp "list") '()

 (butlast l n) → t l : (true-listp l) n : (and (integerp n) (<= 0 n))
(butlast l n) is the list obtained by removing the last n elements from the true list l.

Examples:

 > (butlast (list 1 2 3) 1) '(1 2) > (butlast (list 1 2 3) 2) '(1) > (butlast (list 1 2 3) 3) '()

 (fix-true-list x) → t x : t
Coerces x to a true list by replacing the final cdr with nil.

Examples:

 > (fix-true-list (list 1 2 3)) '(1 2 3) > (fix-true-list (cons 1 (cons 2 3))) '(1 2) > (fix-true-list "abc") '() > (fix-true-list 5) '()

 (len lst) → t lst : t
Finds the length of the given list. Returns 0 if lst is not a list.

Examples:

 > (len nil) 0 > (len (list 1 2 3 4 5)) 5 > (len "string") 0 > (len t) 0

 (make-list n) → true-listp n : (and (integerp n) (<= 0 n))
Makes a list of the given length, filling it in with nil.

Examples:

 > (make-list 0) '() > (make-list 3) '(() () ())

 (nth n lst) → t n : (and (integerp n) (>= n 0)) lst : (true-listp lst)
Gets the nth element of lst

Examples:

 > (nth 2 (list 1 2 3)) 3 > (nth 4 (list 1 2 1)) '()

 (nthcdr n lst) → t n : (and (integerp n) (>= n 0)) lst : (true-listp lst)
Gets the nth cdr of the given list

Examples:

 > (nthcdr 2 (list 1 2 3)) '(3) > (nthcdr 3 (list 1 2 1)) '()

 (reverse x) → t x : (or (true-listp x) (stringp x))
Reverse the given list or string

Examples:

 > (reverse (list 1 2 3 4)) '(4 3 2 1) > (reverse "abcd") "dcba"

 (take n l) → t n : (and (integerp n) (not (< n 0))) l : (true-listp l)

Examples:

 > (take 3 (list 1 2 3 4 5)) '(1 2 3) > (take 0 (list 1 2 3 4 5)) '()

 (update-nth n v lst) → t n : (and (integerp n) (<= 0 n)) v : t lst : (true-listp l)
Replaces the nth (0-based) position in lst with the value v. If n is greater than the length of lst, then update-nth will add padding to the end of the list consisting of nil values.

Examples:

 > (update-nth 0 'z '(a b c d e)) '(z b c d e) > (update-nth 8 'z '(a b c d e)) '(a b c d e () () () z)

 (first lst)
first member of the list

Example:

 > (first (list 1 2 3 4 5 6 7 8)) 1

 (second lst)

Example:

 > (second (list 1 2 3 4 5)) 2

 (third lst)

Example:

 > (third (list 1 2 3 4 5 6 7 8 9 10)) 3

 (fourth lst)
fourth member of the list

Example:

 > (fourth (list 1 2 3 4 5 6 7 8)) 4

 (fifth lst)
fifth member of the list

Example:

 > (fifth (list 1 2 3 4 5 6 7 8)) 5

 (sixth lst)
Sixth member of the list

Example:

 > (sixth (list 1 2 3 4 5 6 7 8 9 10)) 6

 (seventh lst)

Example:

 > (seventh (list 1 2 3 4 5 6 7 8 9 10)) 7

 (eighth lst)
eighth member of the list

Example:

 > (eighth (list 1 2 3 4 5 6 7 8)) 8

 (ninth x)

Example:

 > (ninth (list 1 2 3 4 5 6 7 8 9 10)) 9

 (tenth lst)

Example:

 > (tenth (list 1 2 3 4 5 6 7 8 9 10)) 10

 (last lst)
last member of the list

Example:

 > (last (list 1 2 3 4 5)) '(5)

 (rest lst)
The same as cdr

Example:

 > (rest (list 'w 'x 'y 'z)) '(x y z)