首页 > 解决方案 > 用于 case 宏的 Defparameter 和相等谓词

问题描述

我有一些使用 defparameter 创建的整数类型的全局变量。我在 CASE 子句中使用这些作为键来匹配 test-key,在我的程序中的某个时刻,它被设置为这些全局变量之一。

据我所知, CASE 宏使用 EQL ( http://clhs.lisp.se/Body/26_glo_s.htm#same ),但我没有得到匹配:所有内容都被转储到 else 子句中。下面的代码总结了令我困惑的地方。

我不明白为什么我在 CASE 中没有得到 YES。

标签: common-lisp

解决方案


不评估 case 子句,它们是按字面意思理解的。这个:

(case x
  (snafu 'yes)
  (t 'no))

相当于:

(if (eql x 'snafu) 'yes 'no)

snafu请注意:之前的引号x与符号snafu而不是其值进行比较。


推荐阅读