为什么常见的lisp的case构造总是匹配True(T)?

时间:2012-03-18 15:58:29

标签: common-lisp case

这是关于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与xt不匹配。我错过了什么?提前谢谢。

2 个答案:

答案 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。因此,否则子句的标记为otherwiset

这意味着,如果您的case子句以otherwiset开头,那么我们就会otherwise-clause