blob: 3164ae5a9851b2f120b6f8b98e897346b0903aa6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
@code{(require 'tree)}
@ftindex tree
These are operations that treat lists a representations of trees.
@defun subst new old tree
@defunx substq new old tree
@defunx substv new old tree
@defunx subst new old tree equ?
@code{subst} makes a copy of @var{tree}, substituting @var{new} for
every subtree or leaf of @var{tree} which is @code{equal?} to @var{old}
and returns a modified tree. The original @var{tree} is unchanged, but
may share parts with the result.
@code{substq} and @code{substv} are similar, but test against @var{old}
using @code{eq?} and @code{eqv?} respectively. If @code{subst} is
called with a fourth argument, @var{equ?} is the equality predicate.
Examples:
@lisp
(substq 'tempest 'hurricane '(shakespeare wrote (the hurricane)))
@result{} (shakespeare wrote (the tempest))
(substq 'foo '() '(shakespeare wrote (twelfth night)))
@result{} (shakespeare wrote (twelfth night . foo) . foo)
(subst '(a . cons) '(old . pair)
'((old . spice) ((old . shoes) old . pair) (old . pair)))
@result{} ((old . spice) ((old . shoes) a . cons) (a . cons))
@end lisp
@end defun
@defun copy-tree tree
Makes a copy of the nested list structure @var{tree} using new pairs and
returns it. All levels are copied, so that none of the pairs in the
tree are @code{eq?} to the original ones -- only the leaves are.
Example:
@lisp
(define bar '(bar))
(copy-tree (list bar 'foo))
@result{} ((bar) foo)
(eq? bar (car (copy-tree (list bar 'foo))))
@result{} #f
@end lisp
@end defun
|