Buy the book!
|[ < ]||[ > ]||[ << ]||[ 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#'.
#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:
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
to a non-
nil value. See section 19.6 Variables Affecting Output.
|webmaster donations bookstore||delorie software privacy|
|Copyright © 2003 by The Free Software Foundation||Updated Jun 2003|