GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Dotted-Pair-Notation.html ・ emacs-doc.conao3.com

2.4.6.2 ドットペア表記

ドットペア表記は、CAR と CDR を明示的に表す cons セルの汎用的な構文です。この構文において、(a . b) は、CAR がオブジェクト a であり、CDR がオブジェクト b である cons セルを表します。ドットペア表記は、CDR がリストである必要がないため、リスト構文よりも汎用的です。しかし、リスト構文で十分な場合には、かえって煩雑になります。ドットペア表記では、リスト ‘(1 2 3)’ は ‘(1 . (2 . (3 . nil)))’ と記述されます。nil で終端するリストについては、どちらの表記も使用可能ですが、通常はリスト表記の方が明確で便利です。リストを出力する際、ドットペア表記が用いられるのは、cons セルの 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))) と等価です。 見た目は次のようになります。

    --- ---      --- ---      --- ---
   |   |   |--> |   |   |--> |   |   |--> nil
    --- ---      --- ---      --- ---
     |            |            |
     |            |            |
      --> rose     --> violet   --> buttercup