2.4.6.2 Нотация с точечными парами

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

Вот пример с использованием прямоугольников для иллюстрации нотации с точечными парами. Этот пример показывает пару (rose . violet):

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

Вы можете комбинировать нотацию с точечными парами со списочной нотацией, чтобы удобно представить цепочку точечных ячеек с не-nil конечным CDR. Вы ставите точку после последнего элемента списка, за которой следует 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