前: Cons Cell Type, 上: Cons Cell Type
ドット対記法(dotted pair notation)とは、
carとcdrを明示したコンスセルを表すもう1つの構文です。
この構文では、(a . b)で、
carがオブジェクトaであり
cdrがオブジェクトbであるコンスセルを表します。
したがって、ドット対記法は、リストの構文よりさらに汎用性があります。
ドット対記法では、リスト`(1 2 3)'は、
`(1 . (2 . (3 . nil)))'と書けます。
nilで終るリストならば、どちらの記法でも書き表せますが、
リスト記法のほうがわかりやすくて便利です。
リストを表示するときには、コンスセルのcdrがリスト以外の場合に限って
ドット対記法を使います。
ドット対記法を箱で表現してみます。
つぎの例は(rose . violet)を表したものです。
--- ---
| | |--> violet
--- ---
|
|
--> rose
最後のcdrがnil以外であるようなコンスセルの連鎖を表現するために、
リスト記法にドット対記法を組み合わせることもできます。
リストの最後の要素のあとにドットを書き、
続けて、最後のコンスセルのcdrを書きます。
たとえば、(rose violet . buttercup)は、
(rose . (violet . buttercup))に等価です。
このオブジェクトはつぎのようになります。
--- --- --- ---
| | |--> | | |--> buttercup
--- --- --- ---
| |
| |
--> rose --> violet
(rose . violet . buttercup)という構文は不正です。
これが意味することはなにもありません。
たとえあったとしても、cdrをviolet用にすでに使っているコンスセルの
cdrにbuttercupを置けということになります。
リスト(rose violet)は、(rose . (violet))に等価であり、
つぎのように図示できます。
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> rose --> violet
同様に、3要素のリスト(rose violet buttercup)は、
(rose . (violet . (buttercup)))に等価です。