这是关于Debian挤压的SBCL 1.0.55。我可能错过了一些明显的东西,但我是初学者,所以请耐心等待。
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
不匹配。我错过了什么?提前谢谢。
答案 0 :(得分:6)
在Common Lisp的case
构造中,t
本身使用,相当于C中的default
;也就是说,评估表达式是否与任何其他情况都不匹配。如果您想匹配实际符号t
,请改用(t)
。
答案 1 :(得分:6)
在CASE文档中描述。
otherwise-clause :: =({otherwise | t} form *)
语法说,否则子句是(otherwise form-1 ... form-n)
或(t form-1 ... form-n)
。请注意,语法为{otherwise | t}
。垂直条是语法规范中的OR。因此,否则子句的标记为otherwise
或t
。
这意味着,如果您的case
子句以otherwise
或t
开头,那么我们就会otherwise-clause
。