Copyright (C) 2000-2012 |
GNU Info (elisp)Circular ObjectsRead 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. automatically generated by info2www version 1.2.2.9 |