elisp: Dotted Pair Notation

 
 2.3.6.2 Dotted Pair Notation
 ............................
 
 “Dotted pair notation” is a general syntax for cons cells that
 represents the CAR and CDR explicitly.  In this syntax, ‘(A . B)’ stands
 for a cons cell whose CAR is the object A and whose CDR is the object B.
 Dotted pair notation is more general than list syntax because the CDR
 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 ‘(1 2
 3)’ is written as ‘(1 . (2 . (3 . nil)))’.  For ‘nil’-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 CDR of a cons cell is not a list.
 
    Here’s an example using boxes to illustrate dotted pair notation.
 This example shows the pair ‘(rose . violet)’:
 
          --- ---
         |   |   |--> violet
          --- ---
           |
           |
            --> rose
 
    You can combine dotted pair notation with list notation to represent
 conveniently a chain of cons cells with a non-‘nil’ final CDR.  You
 write a dot after the last element of the list, followed by the CDR of
 the final cons cell.  For example, ‘(rose violet . buttercup)’ is
 equivalent to ‘(rose . (violet . buttercup))’.  The object looks like
 this:
 
          --- ---      --- ---
         |   |   |--> |   |   |--> buttercup
          --- ---      --- ---
           |            |
           |            |
            --> rose     --> violet
 
    The syntax ‘(rose . violet . buttercup)’ is invalid because there is
 nothing that it could mean.  If anything, it would say to put
 ‘buttercup’ in the CDR of a cons cell whose CDR is already used for
 ‘violet’.
 
    The list ‘(rose violet)’ is equivalent to ‘(rose . (violet))’, and
 looks like this:
 
          --- ---      --- ---
         |   |   |--> |   |   |--> nil
          --- ---      --- ---
           |            |
           |            |
            --> rose     --> violet
 
    Similarly, the three-element list ‘(rose violet buttercup)’ is
 equivalent to ‘(rose . (violet . (buttercup)))’.  It looks like this:
 
          --- ---      --- ---      --- ---
         |   |   |--> |   |   |--> |   |   |--> nil
          --- ---      --- ---      --- ---
           |            |            |
           |            |            |
            --> rose     --> violet   --> buttercup