123456789101112131415161718192021 |
- The function GRAPH-TO-TREE copies an arbitrary s-expression, removing
- cirularity. It does NOT show non-circular shared structure. Places
- where a substructure is EQ to one of its ancestors are replaced by
- non-interned id's of the form <n> where n is a small integer. The
- parent is replaced by a two element list of the form (<n>: u) where the
- n's match, and u is the (de-circularized) structure. This is most
- useful in adapting any printer for use with circular structures.
- The function CPRINT, also defined in the module GRAPH-TO-TREE, is
- simply (PRETTYPRINT (GRAPH-TO-TREE X)).
- Note that GRAPH-TO-TREE is very embryonic. It is MUCH more inefficient
- than it needs to be, heavily consing. A better implementation would
- use a stack (vector) instead of lists to hold intermediate expressions
- for comparison, and would not copy non-circular structure. In addition
- facilities should be added for optionally showing shared structure, for
- performing the inverse operation, and for also elliding long or deep
- structures. Finally, the output representation was chosen at random
- and can probably be improved, or at least brought in line with CL or
- some other standard.
|