В дополнение к другим проблемам, упомянутым выше, наличие отдельного пространства имен для функций делает негигиеничные макросы CL гораздо менее вероятными для укуса пользователя макроса.В CL имя, привязанное к точке вызова, которая появляется в раскрытии макроса, будет иметь определение, используемое в точке вызова, , а не определение, используемое там, где определен макрос.Таким образом, в версии CL Lisp-1, если макрос расширяется до вызова функции LIST, и LIST были определены как переменная в точке, где был вызван макрос, макрос будет работать неправильно.(Обратите внимание, что gensyms не решают эту проблему, в отличие от обратной задачи, которую они решают.)
Этого не происходит в Scheme, потому что по умолчанию макросы Scheme гигиеничны: все имена, используемые в расширенииу макроса есть значения, которые они имели там, где определен макрос, а не там, где он используется.