Процедура cons
создает ячейку cons, указывающую на два предоставленных аргумента.
Cons-ячейка — это пара указателей, а список — это одна cons-ячейка или ряд cons-ячеек, второй указатель которых указывает на другую cons-ячейку, а второй указатель последней ячейки указывает на другой объект.
Примечание. Я использую слово объект для простоты, а не в смысле программирования.
В правильном списке второй указатель последней ячейки cons указывает на пустой список.
В неправильном списке второй указатель последней cons-ячейки указывает на объект, который не является пустым списком.
Примечание2: пустой список ()
является уникальным значением в схеме и отличается от списка. В common lisp он эквивалентен nil, Nil не существует в схеме.
+-----+-----+
| | |
| | |
+--+--+--+--+
| |
| |
v v
obj obj
Минус-ячейка
+-----+-----+ +-----+-----+ +-----+-----+
| | +---->+ | +---->+ | |
| | | | | | | | |
+--+--+-----+ +--+--+-----+ +--+--+--+--+
| | | |
| | | |
v v v v
0 1 2 3
(0 1 2 . 3) -> (0 . (1 . (2 . 3)))
Неверный список
+-----+-----+ +-----+-----+ +-----+-----+
| | +---->+ | +---->+ | +----> ()/nil
| | | | | | | | |
+--+--+-----+ +--+--+-----+ +--+--+-----+
| | |
| | |
v v v
0 1 2
(0 1 2) -> (0 . (1 . (2 . () )
Правильный список
Точка (когда она видна в repl) используется для обозначения того, что последний указатель списка указывает на объект, который не является пустым списком и, следовательно, является неправильным списком.
Это мое понимание, по крайней мере, из общего lisp, хотя я уверен, что это переводится в большинство других lisp (я думаю, что Clojure отличается (если вы считаете его lisp)).
страница Википедии о минусах.
~
person
Kyuvi
schedule
13.07.2020
dot
— это обычный синтаксис парных литералов в Scheme. Точка просто опускается, если cdr пары представляет собой список. - person ceving   schedule 10.07.2020