5
(if '(nil nil)
    'print-true
    'print-false)

(if '(nil)
    'print-true
    'print-false)

在上面的代码中,为什么 Lisp 解释器总是将这些形式评估为真(print-true)。我认为nil在 Common Lisp 中代表错误。

我正在使用 GNU CLISP。

4

2 回答 2

12

nil是假的。其他任何事情都是真的。'(nil)是一个包含一个元素的列表,即nil. '(nil nil)是一个包含两个元素的列表,即nilnil。这两种表达方式都不相同nil,因此if认为它是正确的。

于 2011-02-14T06:53:31.283 回答
2

nil 相当于一个空列表。

CL-USER> (if (list ) 'print-true 'print-false) 
; prints PRINT-FALSE 
CL-USER> (if (list nil) 'print-true 'print-false) 
; prints PRINT-TRUE

'(nil) 等同于 (list nil),它不同于空列表。

于 2011-02-14T06:57:13.497 回答