Next: , Previous: 一些名词, Up: 惯例


1.3.2 nilt

在Lisp中,nil符号有三重意义:

1) 名为‘nil’的符号 2) 逻辑真值false 3) 空表(具有零个成员的表)

当它被用作变量时,nil的值总是nil

对于Lisp读取器而言,‘()’和‘nil’是相等的,它们代表同样的Lisp对象,即符号nil,只所以采用不同的方式书写,主要是从读者的 角度考虑,在Lisp读取器读取了‘()’或‘nil’后,没有办法知道用户到底是用哪种形式编写的。

在本文档中,我们在需要强调空表时,将用()表示,而当我们强调逻辑真值false时,将用false表示,这也是一种好的Lisp编程惯例。

     (cons 'foo ())                ; 强调空表
     (setq foo-flag nil)           ; 强调真值false

在需要真值的上下文中,所有非nil的值都被当做true 对待;然而推荐用t来表示真值中的true 。当你需要选择一个表示真值 true的值时,如果没有其他的考虑,建议使用t,符号t永远具有值t

在Emacs Lisp中,nilt是求值是自身的特殊符号,因此你可以不必引用(译注:引用是Emacs Lisp中的一个重要概念,对应于quote函数, 后面会讲到)它们而把它们当做常量使用,尝试改变它们的值将得到setting-constance错误,详情请参考See Constant Variables,。

— Function: booleanp object

当object是tnil中的任意一个时,返回非nil(译注,这里的非空表示不是nil,但并不代表返回t,比如求值 (booleanp nil)会得到这样一个表(nil t),同样是真值true