次: , 前: Some Terms, 上: Conventions


1.3.2 nilとt

Lispでは、シンボルnilには3つの異なる意味があります。 まず、nilという名前のシンボルです。 2つめは、真理値の偽(false)です。 3つめは、空リスト、つまり、要素数が0個のリストです。 変数として使った場合、nilの値はつねにnilです。

Lispリーダにとっては、`()'と`nil'は同一です。 どちらも、同じオブジェクト、シンボルnilを表します。 シンボルを異なった書き方にするのは、完全に人間向けです。 `()'や`nil'をLispリーダが読み取ったあとでは、 プログラマが実際にどちらの表記を用いたかわかりません。

本書では、空リストを強調するときには()を使い、 真理値の偽を強調するときにはnilを使います。 これは、Lispプログラムでも使うとよい慣習です。

     
     
     (cons 'foo ())                ; 空リストであることを強調する
     (not nil)                     ; 真理値の偽であることを強調する

真理値の真を必要とする場面では、 nil以外の値は、真(true)であるとみなします。 しかし、真を表す望ましい書き方はtです。 真を表す値が必要なとき、 適当な判断基準がない場合にはtを使います。 シンボルtの値はつねにtです。

Emacs Lispでは、nilとtは特別なシンボルであり、 評価するとそれ自身になります。 そのため、これらをプログラム内で定数として使うとき、 これらをクォートする必要はありません。 これらの値を変更しようとすると、エラーsetting-constantになります。 コロン(`:')で始まる名前のシンボルも同様です。 See Constant Variables。