В Common Lisp объекты в кавычках являются константными литеральными данными. Вы не должны изменять эти данные, так как последствия не определены. Возможные последствия: изменение общих данных, попытка изменить данные только для чтения, ошибка может сигнализировать, она может просто работать, ...
Для списков:
'(1 2 3)
Выше приведен постоянный список, который будет построен читателем и оценен сам по себе, поскольку он цитируется. Если он появляется в коде на Лиспе, компилятор каким-то образом вставит эти данные в код FASL.
(quote (1 2 3))
- это еще один способ написать это.
(list 1 2 3)
это вызов функции Common Lisp LIST
с тремя аргументами 1
, 2
и 3
. При оценке результата получается новый новый список (1 2 3)
.
Аналогично:
'(1 . 2) and (cons 1 2)
'#(1 2 3) and (vector 1 2 3)
Один - это буквенные данные, а другой - вызов функции, которая создает такую структуру данных.