Common Lisp HyperSpec: несвязанная обработка символов в соответствующих реализациях
Это довольно технический вопрос о соответствующих реализациях спецификации ANSI Lisp:
В Разделе 2.3.4 говорится, что токен, считанный как символ, который недоступен в текущем пакете, помещается в землю как новый символ в текущем пакете.
В Разделе 3.1.2.1 говорится, что если символ не привязан, выдается ошибка.
Что происходит с несвязанными символами между итерациями REPL? Удалит ли соответствующая реализация несвязанные символы из текущего пакета или будет сохранять интернированные символы, пока REPL не займет всю доступную память?
1 ответ
Как только вы интернируете символ, он остается интернированным, пока вы не удалите его явным образом. И если вы вводите имя интернированного символа, возвращается тот же самый символ.
Читателя не волнует, привязан ли символ или нет. Это становится актуальным только в том случае, если вы пытаетесь оценить символ. Но символы можно использовать без оценки, например, как часть цитируемых данных или когда программа вызываетREAD
сам.