Поскольку case
является макросом, можно узнать, какой код он генерирует:
* (pprint (macroexpand-1 '(case x
(snafu 'yes)
(t 'no))))
(LET ((#:G427 X))
(DECLARE (IGNORABLE #:G427))
(COND ((EQL #:G427 'SNAFU) NIL 'YES)
(T NIL 'NO)))
Можно видеть, что snafu
используется как буквенный символ, а не как переменная.