| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] | 
In Emacs 21, to represent shared or circular structure within a complex of Lisp objects, you can use the reader constructs `#n=' and `#n#'.
  Use #n= before an object to label it for later reference;
subsequently, you can use #n# to refer the same object in
another place.  Here, n is some integer.  For example, here is how
to make a list in which the first element recurs as the third element:
| (#1=(a) b #1#) | 
This differs from ordinary syntax such as this
| ((a) b (a)) | 
which would result in a list whose first and third elements look alike but are not the same Lisp object. This shows the difference:
| (prog1 nil
  (setq x '(#1=(a) b #1#)))
(eq (nth 0 x) (nth 2 x))
     => t
(setq x '((a) b (a)))
(eq (nth 0 x) (nth 2 x))
     => nil
 | 
You can also use the same syntax to make a circular structure, which appears as an "element" within itself. Here is an example:
| #1=(a #1#) | 
This makes a list whose second element is the list itself. Here's how you can see that it really works:
| (prog1 nil
  (setq x '#1=(a #1#)))
(eq x (cadr x))
     => t
 | 
  The Lisp printer can produce this syntax to record circular and shared
structure in a Lisp object, if you bind the variable print-circle
to a non-nil value.  See section 19.6 Variables Affecting Output.