Пробелы используются для разделения списка токенов. A.B
- это один токен. (A.B)
- список с одним элементом. (A . B)
- это конс-ячейка с A
как автомобиль и B
как cdr.
Минус ячейка - это пара "вещей" (объектов). В вашем случае это символы, и они называются A
, B
и т. Д. Печатное представление такой ячейки, например, (A . B)
. Это называется «точечная нотация». Первый элемент называется «car», второй «cdr».
Функция cons
создает такую ячейку. (cons 'a 'b)
создает ячейку (A . B)
. Обратите внимание, что имена всегда заключаются в внутренний регистр .
Скорее всего, этого хотел ваш учитель, поэтому ((A . B) . C)
- это правильный вывод, а ваш код - правильный ответ. Это ячейка, в которой автомобиль указывает на другую ячейку, а cdr содержит C
. Эта другая ячейка является ячейкой, в которой автомобиль содержит A
и cdr B
.
Кстати, список представляет собой линейную цепочку таких cons-ячеек, так что автомобиль всегда содержит значение, а cdr указывает на остальную часть списка. Последний cdr нигде не указывает (который в Лиспе называется NIL). В точечной записи список, например, (A . (B . (C . NIL)))
. Поскольку списки важны, их можно записать так: (A B C)
. Если последний CDR имеет значение вместо NIL, оно отображается в точечной нотации, например, (A . (B . (C . D))))
можно записать как (A B C . D)
.