summaryrefslogtreecommitdiff
path: root/devdocs/elisp/dotted-pair-notation.html
diff options
context:
space:
mode:
Diffstat (limited to 'devdocs/elisp/dotted-pair-notation.html')
-rw-r--r--devdocs/elisp/dotted-pair-notation.html35
1 files changed, 35 insertions, 0 deletions
diff --git a/devdocs/elisp/dotted-pair-notation.html b/devdocs/elisp/dotted-pair-notation.html
new file mode 100644
index 00000000..2c60b7fb
--- /dev/null
+++ b/devdocs/elisp/dotted-pair-notation.html
@@ -0,0 +1,35 @@
+ <h4 class="subsubsection">Dotted Pair Notation</h4> <p><em>Dotted pair notation</em> is a general syntax for cons cells that represents the <small>CAR</small> and <small>CDR</small> explicitly. In this syntax, <code>(<var>a</var> . <var>b</var>)</code> stands for a cons cell whose <small>CAR</small> is the object <var>a</var> and whose <small>CDR</small> is the object <var>b</var>. Dotted pair notation is more general than list syntax because the <small>CDR</small> does not have to be a list. However, it is more cumbersome in cases where list syntax would work. In dotted pair notation, the list ‘<samp>(1 2 3)</samp>’ is written as ‘<samp>(1 . (2 . (3 . nil)))</samp>’. For <code>nil</code>-terminated lists, you can use either notation, but list notation is usually clearer and more convenient. When printing a list, the dotted pair notation is only used if the <small>CDR</small> of a cons cell is not a list. </p> <p>Here’s an example using boxes to illustrate dotted pair notation. This example shows the pair <code>(rose . violet)</code>: </p> <div class="example"> <pre class="example"> --- ---
+ | | |--&gt; violet
+ --- ---
+ |
+ |
+ --&gt; rose
+</pre>
+</div> <p>You can combine dotted pair notation with list notation to represent conveniently a chain of cons cells with a non-<code>nil</code> final <small>CDR</small>. You write a dot after the last element of the list, followed by the <small>CDR</small> of the final cons cell. For example, <code>(rose violet
+. buttercup)</code> is equivalent to <code>(rose . (violet . buttercup))</code>. The object looks like this: </p> <div class="example"> <pre class="example"> --- --- --- ---
+ | | |--&gt; | | |--&gt; buttercup
+ --- --- --- ---
+ | |
+ | |
+ --&gt; rose --&gt; violet
+</pre>
+</div> <p>The syntax <code>(rose . violet . buttercup)</code> is invalid because there is nothing that it could mean. If anything, it would say to put <code>buttercup</code> in the <small>CDR</small> of a cons cell whose <small>CDR</small> is already used for <code>violet</code>. </p> <p>The list <code>(rose violet)</code> is equivalent to <code>(rose . (violet))</code>, and looks like this: </p> <div class="example"> <pre class="example"> --- --- --- ---
+ | | |--&gt; | | |--&gt; nil
+ --- --- --- ---
+ | |
+ | |
+ --&gt; rose --&gt; violet
+</pre>
+</div> <p>Similarly, the three-element list <code>(rose violet buttercup)</code> is equivalent to <code>(rose . (violet . (buttercup)))</code>. It looks like this: </p> <div class="example"> <pre class="example"> --- --- --- --- --- ---
+ | | |--&gt; | | |--&gt; | | |--&gt; nil
+ --- --- --- --- --- ---
+ | | |
+ | | |
+ --&gt; rose --&gt; violet --&gt; buttercup
+</pre>
+</div> <p>As a somewhat peculiar side effect of <code>(a b . c)</code> and <code>(a . (b . c))</code> being equivalent, for consistency this means that if you replace <code>b</code> here with the empty sequence, then it follows that <code>(a . c)</code> and <code>(a . ( . c))</code> are equivalent, too. This also means that <code>( . c)</code> is equivalent to <code>c</code>, but this is seldom used. </p><div class="_attribution">
+ <p class="_attribution-p">
+ Copyright &copy; 1990-1996, 1998-2022 Free Software Foundation, Inc. <br>Licensed under the GNU GPL license.<br>
+ <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Dotted-Pair-Notation.html" class="_attribution-link">https://www.gnu.org/software/emacs/manual/html_node/elisp/Dotted-Pair-Notation.html</a>
+ </p>
+</div>