Tail-Recursive Intersection
(defun intersecttr (x y) (intersecttrb x y '()))
(defun intersecttrb (x y result)
(if (null x)
result
(intersecttrb (rest x) y
(if (member (first x) y)
(cons (first x) result)
result))))
>(intersecttr '(a b c) '(a c e))
1> (INTERSECTTR (A B C) (A C E))
2> (INTERSECTTRB (A B C) (A C E) NIL)
3> (INTERSECTTRB (B C) (A C E) (A))
4> (INTERSECTTRB (C) (A C E) (A))
5> (INTERSECTTRB NIL (A C E) (C A))
<5 (INTERSECTTRB (C A))
<4 (INTERSECTTRB (C A))
<3 (INTERSECTTRB (C A))
<2 (INTERSECTTRB (C A))
<1 (INTERSECTTR (C A))
(C A)