前: 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)))
に等価です。