Lisp:为什么以及如何(零无)评估为真?

时间:2011-02-14 06:41:52

标签: lisp clisp

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

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

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

我正在使用GNU CLISP。

2 个答案:

答案 0 :(得分:11)

nil是假的。其他任何事都是真的。 '(nil)是包含一个元素的列表,即nil'(nil nil)是一个包含两个元素的列表,即nilnil。这些表达式本身都不与nil相同,因此if将其视为真。

答案 1 :(得分: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),它与空列表不同。