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

zer*_*00l 5 lisp clisp

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

(if '(nil)
    'print-true
    'print-false)
Run Code Online (Sandbox Code Playgroud)

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

我正在使用GNU CLISP.

Jos*_*Lee 11

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

  • 从技术上讲,`'(nil)`与`(quote(nil))`相同,是两个元素的列表,`'(nil nil)`是`(quote(nil nil))`. (2认同)