common-lisp
котировка
Поиск…
Синтаксис
- (объект цитаты) -> объект
замечания
Есть некоторые объекты (например, символы ключевых слов), которые не нужно указывать, поскольку они сами оценивают.
Пример простой цитаты
Цитата - это специальный оператор, который предотвращает оценку его аргумента. Он возвращает свой аргумент, неоценимый.
CL-USER> (quote a)
A
CL-USER> (let ((a 3))
(quote a))
A
'является псевдонимом для специального оператора QUOTE
Обозначение 'thing
равно (quote thing)
.
Читатель будет делать расширение:
> (read-from-string "'a")
(QUOTE A)
Цитирование используется для предотвращения дальнейшей оценки. Выделенный объект оценивается сам по себе.
> 'a
A
> (eval '+ 1 2)
3
Если цитируемые объекты деструктивно изменены, последствия не определены!
Избегайте разрушительных операций с цитируемыми объектами. Объекты с котировкой - это литеральные объекты. Возможно, они каким-то образом встроены в код. Как это работает, и последствия изменений не указаны в стандарте Common Lisp, но могут иметь нежелательные последствия, такие как изменение общих данных, попытка изменить данные, защищенные от записи, или создание непреднамеренных побочных эффектов.
(delete 5 '(1 2 3 4 5))
Цитата и самооценка объектов
Обратите внимание, что многие типы данных не нужно указывать, так как они сами оценивают. QUOTE
особенно полезна для символов и списков, чтобы предотвратить оценку в виде форм Лиспа.
Пример для других типов данных, которые не нужно указывать для предотвращения оценки: строки, числа, символы, объекты CLOS, ...
Вот пример для строк. Результаты оценки - это строки, независимо от того, указаны они в источнике или нет.
> (let ((some-string-1 "this is a string")
(some-string-2 '"this is a string with a quote in the source")
(some-string-3 (quote "this is another string with a quote in the source")))
(list some-string-1 some-string-2 some-string-3))
("this is a string"
"this is a string with a quote in the source"
"this is another string with a quote in the source")
Таким образом, предложение для объектов необязательно.