Read Syntax for Circular Objects
================================
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. Note:Output Variables.