List processing
LISP functions working with lists.
CONS
Expects two arguments, creates and returns new cons cell with first argument in CAR
second in CDR
.
>(cons 'a nil) (A) ; proper list with single element >(cons 'a 'b) (A . B) ; cons cell, not proper list
LIST
Expect zero or more arguments, returns the arguments as proper list.
>(list 'a 'b 'c) (A B C) ; proper list with three elements >(cons 'a (list 'b 'c 'd)) (A B C D) ; we can cons to list
APPEND
Expect zero or more arguments, and returns them in single proper list. The arguments that are lists will be connected together. Non list arguments will be added as elements. The returned list is freshly consed, so the original lists are not affected. In LabLISP, APPEND
is extremely benevolent and accepts dotted or even cyclic lists. When the new cons cell are created, the trailing atoms in dotted lists are ignored, and cyclic list is cut at the cell which has a CDR pointing to some previous element of the list.
>(setq l1 '(a b c)) (A B C) >(setq l2 '(e f)) (E F) >(append l1 'd l2) (A B C D E F) >l1 (A B C) ; original L1 is untouched
NCONC
Evil twin of APPEND
. Expect zero or more arguments, and returns them in single list. List arguments will be now merged to the final list, so the original lists are affected. For dotted lists, the trailing atom is dropped, unless it is at the end of last list argument. In that case the returned list will also be dotted. Cyclic lists are not allowed in the middle of the arguments, but the last list can be cyclic, and so will be the returned list.
>(setq l1 '(a b c)) ; propper list (A B C) >(setq l2 (cons 'e 'f)) ; this cons is a dotted list (E . F) >(nconc l1 l2) (A B C E . F) >l1 (A B C E . F) ; original L1 is modified
LENGTH
Expects one argument that must be proper list, returns the length.
>(length (list 'a 'b 'c)) ; proper list with three elements 3 >(length nil) ; NIL is (), i.e. empty list 0
CAR
CDR
etc. (Accessor)
Functions accessing list elements. They expect single argument that must be list. CAR
, CADR
, CADDR
, CADDDR
access first, second, third and fourth element of list. With combinations of As and Ds can access elements of cons cell trees, or lists of lists: CAAR
gets first element of first sublist, and so on, with all combinations up to CAAAAR
and CDDDDR
.
>(car '(a b c)) A >(cdr '(a b c)) (B C) >(cadr '(a b c)) B >(caddr '(a b c)) C >(cadaar '(((a b) c d) e f)) B >(cdddr '(a b c d e f)) (D E F)
FIRST
to TENTH
(Accessor)
Equivalents to CAR
, CADR
, CADDR
, CADDDR
, and above, up to CAR of tenth cons cell.
>(second '(a b c)) B
REST
(Accessor)
Is the same as CDR
. That means FIRST
and REST
are synonymes to CAR
and CDR
, respectively.
NTH
NTHCDR
(Accessor)
Another equivalent access functions to list elements. Expects two arguments, first is integer index, starting from 0, second is the list.
>(nth 0 '(a b c)) A >(nth 2 '(a b c)) C >(nthcdr 0 '(a b c)) (A B C)
LAST
Returns last N cons cells of a list. Expects 2 arguments, first must be list, second argument is the count N. If second argument is missing, returns the last one cons cell.
>(last (list 'a 'b 'c 'd 'e) 2) (D E) ; last 2 cons cells