gpt4 book ai didi

functional-programming - 简单的 Lisp Case 语句问题 - 与 nil 比较的问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:57 25 4
gpt4 key购买 nike

我正在尝试使用 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

我假设 case 语句有一些我不理解的行为。任何帮助将不胜感激。

编辑:澄清一下,我知道 'a 不会被评估。我只是模拟了这个例子来创建一个 case 语句的目标绝对不是 nil 的情况。

我正在使用 xlisp-plus,但我将尝试安装一个真正的 clisp,看看它的行为是否不同。

编辑(再一次):安装了 CLISP,它在那里工作正常。不值得费心去调查为什么 xlisp 是不同的。感谢大家的完整性检查。

最佳答案

CASE 中的每个关键规范可以是文字列表或单个原子。然而,CLtL says that the atom must not be NIL因为对于它是文字 NIL 还是空列表是不明确的。使用 NIL 列表代替:

> (case 'a
((nil) nil)
(otherwise 'b))
B
> (case nil
((nil) nil)
(otherwise 'b))
NIL

关于functional-programming - 简单的 Lisp Case 语句问题 - 与 nil 比较的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com