我有一些整数类型的全局变量,使用defparameter创建。我将它们用作CASE子句中的键值,以匹配在程序某个点上设置为其中一个全局变量的test-key。
据我所知,CASE宏使用EQL(http://clhs.lisp.se/Body/26_glo_s.htm#same),但是我没有找到匹配项:所有内容都被转储到otherwise子句中。下面的代码总结了让我感到困惑的问题。
- (defparameter snafu 123) => SNAFU
- (let ((x snafu)) (and (eq x snafu) (eql x snafu) (equal x snafu))) => T
- (let ((x snafu)) (case x (snafu 'yes) (t 'no))) => NO
- (let ((x snafu)) (cond ((eql x snafu) 'yes) (t 'no))) => YES
我不理解为什么在CASE子句中我没有得到YES。