Они являются частью Common Lisp READ
er. Идея состоит в том, что они «скрывают» текст, если определенная функция (часто определенная реализация CL) не является (#+
) или недоступна (#-
).
Это, вероятно, концепция CL, наиболее похожая на идею C / C ++ о «текстовых макросах» - концептуально и прагматически они очень похожи на что-то вроде
#ifdef __MSVC12__
#ifndef __cplusplus__
... и тому подобное. Они буквально скрывают биты входящего кода курса от READ
er, поэтому они никогда не лексируются - анализируются - интерпретируются - компилируются - оцениваются - интернированы - nada. Они просто перестают существовать, если в используемой реализации CL отсутствует функция / это «неправильная» реализация / любой другой флаг.