Next: Association List Type, Previous: Box Diagrams, Up: Cons Cell Type [Contents][Index]
ドットペア表記(dotted pair
notation)はCARとCDRが明示的に表されたコンスセルにたいする、一般的な構文です。この構文では、(a
.
b)は、CARがオブジェクトaで、CDRがオブジェクトbという意味になります。CDRがリスとである必要がないので、ドットペア表記は、より一般的なリスト構文です。しかしキスと構文が機能するでような場合には、より扱いにくくなります。ドットペア表記では、リスト‘(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)は無効です。なぜならこれが意味することは何もないからです。何かあるにしても、violetのためにCDRがすでに使用されているコンスセルのCDRにbuttercupを置く、ということになります。
リスト(rose violet)は(rose . (violet))と等価であり、以下のようになります:
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> rose --> violet
同様に3要素のリスト(rose violet buttercup)は、(rose . (violet
. (buttercup)))と等価です。
これは以下のようになります:
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup