Нотация с точечными парами — это общий синтаксис для точечных ячеек, который явно представляет 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