Tail Recursive List Design Pattern


(defun fn (lst)  (fnb lst answerinit))

(defun fnb (lst answer)
  (if (null lst)       ; test for base case
      answer           ; answer for base case
      (fnb (rest lst)
           (some-combination-of
             answer
             (something-about (first lst)))) ) )


public int fn (Cons lst) {
  return fnb(lst, answerinit); }

public static int fnb (Cons lst, answer) {
  if ( lst == null )
     return answer;
   else return fnb(rest(lst),
                   someCombinationOf(
                     answer,
                     somethingAbout(first(lst))));}

A smart compiler can detect a tail-recursive function and compile it so that it is iterative and uses O(1) stack space.

Contents    Page-10    Prev    Next    Page+10    Index