nil 说明

在举例说明真假判断之前,我们需要先解释 nil

在 Emacs Lisp 中,符号 nil 有两层含义。 第一,它表示空列表。第二,它表示假,是真假判断返回假时的值。 nil 可以写为空列表 (),也可以直接写 nil。 在 Lisp 解释器看来,()nil 完全等价。 不过人们习惯用 nil 表示假,用 () 表示空列表。

在 Emacs Lisp 中,任何不是 nil(即不是空列表)的值都被视为真。 这意味着,如果一个表达式求值后返回的不是空列表, if 就会判定为真。例如,如果把一个数字放在判断位置, 它会求值并返回自身,因为数字求值时就是返回自己。 在这个条件判断中,if 会判定为真。 只有当表达式求值返回 nil(空列表)时,判断才为假。

你可以对下面示例中的两个表达式求值,直观感受这一点。

第一个例子中,数字 4 作为 if 的判断条件被求值并返回自身, 因此表达式的那么部分被求值并返回:回显区显示 ‘true’。 第二个例子中,nil 表示假,因此表达式的否则部分被求值并返回: 回显区显示 ‘false’。

(if 4
    'true
  'false)

(if nil
    'true
  'false)

顺便一提,如果一个判断返回真但没有其他可用值, Lisp 解释器会返回符号 t 表示真。 例如,表达式 (> 5 4) 求值后会返回 t, 你可以按常规方式求值验证:

(> 5 4)

反之,如果判断为假,该函数会返回 nil

(> 4 5)