Spec-Zone.ru › Elisp

Запись с точечной парой

Запись с точечной парой — это общий синтаксис для конс-ячеек, в котором CAR и CDR указаны явно. В этом синтаксисе (a . b) обозначает конс-ячейку, у которой CAR — объект a, а CDR — объект b. Запись с точечной парой универсальнее синтаксиса списков, поскольку CDR не обязательно должен быть списком. Однако в случаях, когда подходит синтаксис списков, такая запись более громоздка. В записи с точечной парой список ‘(1 2 3)’ записывается как ‘(1 . (2 . (3 . nil)))’. Для списков, завершающихся nil, можно использовать любую запись, но синтаксис списков обычно понятнее и удобнее. При выводе списка запись с точечной парой используется только в том случае, если CDR конс-ячейки не является списком.

Ниже приведён пример, иллюстрирующий запись с точечной парой с помощью блоков. В примере показана пара (rose . violet):

    --- ---
   |   |   |--> violet
    --- ---
     |
     |
      --> rose

Можно сочетать запись с точечной парой и синтаксис списков, чтобы удобно представлять цепочку конс-ячеек с завершающим CDR, не являющимся nil. После последнего элемента списка ставится точка, за которой следует CDR последней конс-ячейки. Например, (rose violet . buttercup) эквивалентно (rose . (violet . buttercup)). Объект выглядит так:

    --- ---      --- ---
   |   |   |--> |   |   |--> buttercup
    --- ---      --- ---
     |            |
     |            |
      --> rose     --> violet

Синтаксис (rose . violet . buttercup) недопустим, поскольку он не может иметь смысла. В лучшем случае он означал бы, что buttercup нужно поместить в CDR конс-ячейки, чей CDR уже используется для violet.

Список (rose violet) эквивалентен (rose . (violet)) и выглядит так:

    --- ---      --- ---
   |   |   |--> |   |   |--> nil
    --- ---      --- ---
     |            |
     |            |
      --> rose     --> violet

Аналогично, трёхэлементный список (rose violet buttercup) эквивалентен (rose . (violet . (buttercup))). Он выглядит так:

    --- ---      --- ---      --- ---
   |   |   |--> |   |   |--> |   |   |--> nil
    --- ---      --- ---      --- ---
     |            |            |
     |            |            |
      --> rose     --> violet   --> buttercup

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Dotted-Pair-Notation.html

Spec-Zone.ru

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