Изображение списков в виде блок-схем
Список можно проиллюстрировать диаграммой, на которой ячейки cons показаны как пары прямоугольников, похожих на домино. (Читатель Lisp не может прочитать такую иллюстрацию; в отличие от текстовой записи, которую понимают и люди, и компьютеры, иллюстрации в виде блоков понимают только люди.) Эта картинка представляет собой список из трёх элементов (rose violet buttercup):
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup
На этой диаграмме каждый прямоугольник представляет собой ячейку, которая может содержать или ссылаться на любой объект Lisp. Каждая пара прямоугольников представляет ячейку cons. Каждая стрелка представляет ссылку на объект Lisp, либо атом, либо другую ячейку cons.
В этом примере первый прямоугольник, содержащий CAR первой ячейки cons, ссылается на или содержит rose (символ). Второй прямоугольник, содержащий CDR первой ячейки cons, ссылается на следующую пару прямоугольников, вторую ячейку cons. CAR второй ячейки cons - это violet, а её CDR - третья ячейка cons. CDR третьей (и последней) ячейки cons - nil.
Вот ещё одна диаграмма того же списка, (rose violet
buttercup), нарисованная другим способом:
--------------- ---------------- ------------------- | car | cdr | | car | cdr | | car | cdr | | rose | o-------->| violet | o-------->| buttercup | nil | | | | | | | | | | --------------- ---------------- -------------------
Список без элементов называется пустым списком; он идентичен символу nil. Другими словами, nil является и символом, и списком.
Вот список (A ()), или, что эквивалентно, (A nil), изображённый с помощью прямоугольников и стрелок:
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> A --> nil
Вот более сложная иллюстрация, показывающая список из трёх элементов, ((pine needles) oak maple), первый элемент которого является списком из двух элементов:
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
| --> oak --> maple
|
| --- --- --- ---
--> | | |--> | | |--> nil
--- --- --- ---
| |
| |
--> pine --> needles
Тот же список, представленный во втором формате обозначений прямоугольников, выглядит так:
-------------- -------------- --------------
| car | cdr | | car | cdr | | car | cdr |
| o | o------->| oak | o------->| maple | nil |
| | | | | | | | | |
-- | --------- -------------- --------------
|
|
| -------------- ----------------
| | car | cdr | | car | cdr |
------>| pine | o------->| needles | nil |
| | | | | |
-------------- ----------------
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/Box-Diagrams.html