Deep Recursion
(defun count-top-level-symbols (L)
" Counts all the symbols at the top level of the list using a flat recursion."
(cond ((null L) 0)
((symbolp (car L))
(+ 1 (count-top-level-symbols
(cdr L))))
(t (count-top-level-symbols
(cdr L)))))
(count-top-level-symbols '((a b (c d) e) f g (h i (j)))) ; 2
(defun count-all-symbols (L)
"Counts all symbols in the list L using deep recursion."
(cond ((null L) 0)
((listp (car L))
(+ (count-all-symbols (car L))
(count-all-symbols (cdr L))))
((symbolp (car L))
(+ 1 (count-all-symbols (cdr L))))
(t (count-all-symbols (cdr L)))))
(count-all-symbols '((a b (c d) e) f g (h i (j)))) ;10
(defun depth (L)
"Computes the depth of a list using deep recursion."
(cond ((null L) 0)
((listp (car L))
(max (+ 1 (depth (car L)))
(depth (cdr L))))
(t (max 1 (depth (cdr L))))
))
(depth '((a b (c d) e) f g (h i (j)))) ; 3
Recursion Tree
A tree with a node for each recursive call and where the children of a
node are the recursive calls it generates.