为什么 Common Lisp 的案例结构总是与 True (T) 匹配?



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

在 CASE 文档中进行了描述。

否则-子句::= ({否则 | t} 形式*(

语法说 否则 子句要么是(otherwise form-1 ... form-n)要么是(t form-1 ... form-n)。请注意,语法显示{otherwise | t} 。竖线是语法规范中的 OR。因此,否则子句的标记是otherwiset

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

在 Common Lisp 的case结构中,t 本身使用,等效于 C 中的 default;也就是说,如果表达式与任何其他情况都不匹配,则对其进行计算。如果要匹配实际符号t,请改用(t)

最新更新