Consider the binary trees x
and y
below.
In Lisp, x
is written as the list '(A B)
or, equivalently, as
'(A B . NIL)
. Similarly, y
may be written '(C D E)
.
Suppose we wish to replace the right-most tip of x
by the entire tree y
. This is denoted (app x y)
, where app
stands for ``append''.
We can define app
with:
(defun app (x y) ; Concatenate x and y. (declare (type (satisfies true-listp) x)); We expect x to end in NIL. (cond ((endp x) y) ; If x is empty, return y. (t (cons (car x) ; Else, copy first node (app (cdr x) y))))) ; and recur into next.
If you defined this function in some Common Lisp, then to run
app
on the x
and y
above you could then type
(app '(A B) '(C D E))and Common Lisp will print the result
(A B C D E)
.