Spec-Zone.ru › Elisp

Типы ячеек и списков конс

Ячейка конс — это объект, состоящий из двух слотов, называемых слотом CAR и слотом CDR. Каждый слот может содержать любой объект Lisp. Также говорят, что CAR этой ячейки конс — это тот объект, который в данный момент находится в её слоте CAR, и аналогично для CDR.

Список — это последовательность ячеек конс, связанных таким образом, что слот CDR каждой ячейки конс содержит либо следующую ячейку конс, либо пустой список. Пустой список фактически является символом nil. Подробности см. в разделе Списки. Поскольку большинство ячеек конс используется как часть списков, мы называем любую структуру, созданную из ячеек конс, структурой списка.

Примечание для программистов на C: список Lisp работает как связанный список, построенный из ячеек конс. Поскольку указатели в Lisp неявные, мы не различаем ситуацию, когда слот ячейки конс содержит значение, и когда он указывает на значение.

Поскольку ячейки конс являются центральными для Lisp, у нас также есть термин для объекта, который не является ячейкой конс. Эти объекты называются атомами.

Синтаксис ввода и представление списка в печати идентичны и состоят из левой круглой скобки, произвольного количества элементов и правой круглой скобки. Вот примеры списков:

(A 2 "A")            ; A list of three elements.
()                   ; A list of no elements (the empty list).
nil                  ; A list of no elements (the empty list).
("A ()")             ; A list of one element: the string "A ()".
(A ())               ; A list of two elements: A and the empty list.
(A nil)              ; Equivalent to the previous.
((A B C))            ; A list of one element
                     ;   (which is a list of three elements).

При чтении каждый объект внутри скобок становится элементом списка. То есть для каждого элемента создается ячейка конс. Слот CAR ячейки конс содержит элемент, а её слот CDR ссылается на следующую ячейку конс списка, которая содержит следующий элемент списка. Слот CDR последней ячейки конс устанавливается для хранения nil.

Названия CAR и CDR происходят из истории Lisp. Первоначальная реализация Lisp работала на компьютере IBM 704, который делил слова на две части: адрес и декремент; CAR была инструкцией для извлечения содержимого адресной части регистра, а CDR — инструкцией для извлечения содержимого декрементной части. Напротив, ячейки конс названы в честь функции cons, которая их создает, а сама функция была названа по её назначению — построению ячеек.

• Диаграммы блоков Рисование картинок списков.
• Нотация точечных пар Общий синтаксис для ячеек конс.
• Тип списка ассоциаций Специально сконструированный список.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Cons-Cell-Type.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API