我正在尝试使用 case 语句使一些代码更具可读性。它似乎是一系列 if 语句,但由于某种原因,case 语句总是接受与 nil 的比较,即使它不是真的。有人可以澄清为什么会发生这种行为吗?
例子:
> (case 'a
(nil nil)
(otherwise 'b))
NIL
> (case 'a
('a 'b)
(otherwise nil))
B
在上面的例子中,第一个实例返回 nil,即使 'a 显然不是 nil。尝试用 if 语句做同样的事情就像我期望的那样:
> (if (eq 'a nil) nil 'b)
B
> (if (eq 'a 'a) 'b nil)
B
我假设有一些关于我不理解的案例陈述的行为。任何帮助,将不胜感激。
编辑:澄清一下,我知道 'a 不会被评估。我只是模拟了这个例子来创建一个 case 语句的目标绝对不是 nil 的情况。
我正在使用 xlisp-plus,但我将尝试真正的 clisp 安装,看看它的行为是否不同。
编辑(再一次):安装了 CLISP,它在那里工作正常。不值得费心去研究为什么 xlisp 不同。谢谢大家的理智检查。