File: tree.txi

package info (click to toggle)
slib 3b1-4
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 5,060 kB
  • ctags: 2,432
  • sloc: lisp: 30,036; makefile: 1,152; sh: 372
file content (50 lines) | stat: -rw-r--r-- 1,509 bytes parent folder | download | duplicates (7)
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
49
50
@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