A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://www.gnu.org/software/emacs/manual/html_node/elisp/Circular-Objects.html below:

Circular Objects (GNU Emacs Lisp Reference Manual)

Next: Type Predicates, Previous: Editing Types, Up: Lisp Data Types   [Contents][Index]

2.6 Read Syntax for Circular Objects

To represent shared or circular structures 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:

This differs from ordinary syntax such as this

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 print-circle to a non-nil value. See Variables Affecting Output.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4