Next: Substitution of Expressions, Up: Lists [Contents][Index]

This section describes a number of simple operations on lists, i.e., chains of cons cells.

- Function:
**cl-caddr***x* This function is equivalent to

`(car (cdr (cdr`

. Likewise, this package defines all 24`x`)))`c`

functions where`xxx`r`xxx`is up to four ‘`a`’s and/or ‘`d`’s. All of these functions are`setf`

-able, and calls to them are expanded inline by the byte-compiler for maximum efficiency.

- Function:
**cl-first***x* This function is a synonym for

`(car`

. Likewise, the functions`x`)`cl-second`

,`cl-third`

, …, through`cl-tenth`

return the given element of the list`x`.

- Function:
**cl-rest***x* This function is a synonym for

`(cdr`

.`x`)

- Function:
**cl-endp***x* This function acts like

`null`

, but signals an error if`x`

is neither a`nil`

nor a cons cell.

- Function:
**cl-list-length***x* This function returns the length of list

`x`, exactly like`(length`

, except that if`x`)`x`is a circular list (where the CDR-chain forms a loop rather than terminating with`nil`

), this function returns`nil`

. (The regular`length`

function would get stuck if given a circular list. See also the`safe-length`

function.)

- Function:
**cl-list****arg &rest others* This function constructs a list of its arguments. The final argument becomes the CDR of the last cell constructed. Thus,

`(cl-list*`

is equivalent to`a``b``c`)`(cons`

, and`a`(cons`b``c`))`(cl-list*`

is equivalent to`a``b`nil)`(list`

.`a``b`)

- Function:
**cl-ldiff***list sublist* If

`sublist`is a sublist of`list`, i.e., is`eq`

to one of the cons cells of`list`, then this function returns a copy of the part of`list`up to but not including`sublist`. For example,`(cl-ldiff x (cddr x))`

returns the first two elements of the list`x`

. The result is a copy; the original`list`is not modified. If`sublist`is not a sublist of`list`, a copy of the entire`list`is returned.

- Function:
**cl-copy-list***list* This function returns a copy of the list

`list`. It copies dotted lists like`(1 2 . 3)`

correctly.

- Function:
**cl-tree-equal***x y*`&key :test :test-not :key` This function compares two trees of cons cells. If

`x`and`y`are both cons cells, their CARs and CDRs are compared recursively. If neither`x`nor`y`is a cons cell, they are compared by`eql`

, or according to the specified test. The`:key`

function, if specified, is applied to the elements of both trees. See Sequences.

Next: Substitution of Expressions, Up: Lists [Contents][Index]