Ниже представлены несколько основных операций над cons-ячейками. В данных случаях cons-ячейки рассматриваются как пары, а не компоненты списка.
Функция возвращает car элемент списка list, который должен быть или cons-ячейкой или (). То есть аргумент должен удовлетворять предикату listp. По определению car элемент пустого списка является пустым списком. Если cons-ячейка является первым звеном списке, то можно сказать, что car возвращает первый элемент списка. Например:
Смотрите first.
car
Функция возвращает cdr элемент списка list, который должен быть или cons ячейкой или (). То есть аргумент должен удовлетворять предикату listp. По определению cdr элемент пустого списка является пустым списком. Если cons-ячейка является первым звеном списке, то можно сказать, что cdr возвращает остаток исходного списка без первого элемента. Например:
Смотрите rest.
cdr
[Функция]
caar listВсе композиции до четырёх car и cdr операций определены как самостоятельные функции. Их имена начинаются с c и заканчиваются r. Середина имени содержит последовательность букв a и d в соответствие с композиций выполняемых этими функциями. Например:
Если в качестве аргумента указан список, тогда cadr вернёт второй элемент списка, caddr — третий, и cadddr — четвёртый. Если первый элемент списка является списком, тогда caar вернёт первый элемент этого подсписка, cdar — остаток подсписка без первого элемента, cadar — второй элемент подсписка и так далее.
В целях стиля, предпочтительнее определить функцию или макрос для доступа к части сложной структуры данных, а не использовать длинные car/cdr строки. Например, можно определить макрос для получения списка параметров лямбда-выражения:
и затем использовать lambda-vars вместо cadr. Смотрите также defstruct, которая будет автоматически определять новые типы данных и функции доступа к частям экземпляров этих структур.
Любая из этих функций может использоваться в связке с setf.
cons является (примитивной) функцией для создания новой cons-ячейки, у которой car элемент будет x, а cdr элемент — y. Например:
cons может рассматриваться как для создания cons-ячейки, так и для добавления нового элемента в начало списка.
Данный предикат истинен, если x и y являются изоморфными деревьями с идентичными листьями, то есть, если x и y являются атомами, которые удовлетворяют проверке (по-умолчанию eql), или если они оба являются cons-ячейками и их car элементы удовлетворяют tree-equal и cdr элементы удовлетворяют tree-equal. Таким образом tree-equal рекурсивно сравнивает cons-ячейки (но не любой другой составной объект). Смотрите equal, который рекурсивно сравнивает другие составные объекты, как например строки.
X3J13 voted in January 1989 to restrict user side effects; see section 7.9.
Пользователь ограничен в создании побочных действий так, как это описано в разделе 7.9