这是 SBCL 1.0.55 在 Debian squeeze 上。我可能错过了一些明显的东西,但我是一个初学者,所以请耐心等待。
CL-USER> (defparameter x 0)
CL-USER> (case x (t 111) )
111
所以看起来这里的案例是将变量x
与真值符号t
匹配。这发生在我尝试过的所有事情上;这个x
只是一个例子。我不明白为什么会发生这种情况。由于case
使用eql
进行匹配,因此我尝试了
CL-USER> (eql x t)
NIL
因此,eql 与 x
和 t
不匹配。我错过了什么?提前谢谢。
在 CASE 文档中进行了描述。
否则-子句::= ({否则 | t} 形式*(
语法说 否则 子句要么是(otherwise form-1 ... form-n)
要么是(t form-1 ... form-n)
。请注意,语法显示{otherwise | t}
。竖线是语法规范中的 OR。因此,否则子句的标记是otherwise
或t
。
这意味着,如果您的case
子句以 otherwise
或 t
开头,那么我们有一个otherwise-clause
。
在 Common Lisp 的case
结构中,t
本身使用,等效于 C 中的 default
;也就是说,如果表达式与任何其他情况都不匹配,则对其进行计算。如果要匹配实际符号t
,请改用(t)
。