nil的解释

在说明真值测试之前,我们需要解释一下 nil

在Emacs Lisp中,符号 nil 有两个含义。首先,它表示空列表。其次,它表示假,是在真假测试返回假时返回的值。nil可以被写成空列表,(),或者写作 nil。就Lisp解释器而言,()nil 是一样的。然而,人们倾向于将 nil 用于表示假,而将 () 用于表示空列表。

在Emacs Lisp中,任何不是 nil,即非空列表的值,被认为是真。这意味着如果一个求值返回了不是空列表的值,一个 if 表达式将测试为真。例如,如果一个数字被放在测试的槽位,它将被求值并返回它自己,因为这是数字在被求值时所做的。在这个条件语句中,if 表达式将测试为真。该表达式仅在通过求值表达式返回 nil,即空列表时测试为假。

通过对以下示例中的两个表达式进行求值,您可以看到这一点。

在第一个示例中,数字4作为 if 表达式中的测试被求值并返回自己;因此,表达式的then部分被求值并返回:在回显区域中显示 ‘true’。在第二个示例中,nil 表示假;因此,表达式的else部分被求值并返回:在回显区域中显示 ‘false’。

(if 4
    'true
  'false)

(if nil
    'true
  'false)

顺便说一句,如果某个有用的值在返回真的测试时不可用,那么Lisp解释器将返回符号 t 代表真。例如,表达式 (> 5 4) 在被求值时返回 t,您可以通过通常的方式进行求值查看:

(> 5 4)

另一方面,如果测试为假,则该函数返回 nil

(> 4 5)