Spec-Zone.ru › Elisp

Изображение списков в виде блок-схем

Список можно проиллюстрировать диаграммой, на которой ячейки 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

Spec-Zone.ru

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