Tail Recursive Processing of List

A function is tail recursive if it either returns an answer directly, or the answer is exactly the result of a recursive call. Tail recursion often involves the use of an auxiliary function with extra variables as parameters.


(defun length (lst)
  (lengthb lst 0))         ; init extra variable

(defun lengthb (lst answer)
  (if (null lst)           ; test for base case
      answer               ; answer for base case
      (lengthb (rest lst)  ; recursive call
               (+ answer 1)) ) )   ; update answer


public static int length (Cons lst) {
  return lengthb(lst, 0); }

public static int lengthb (Cons lst, int answer) {
  if ( lst == null )
     return answer;
   else return lengthb(rest(lst), answer + 1); }

Contents    Page-10    Prev    Next    Page+10    Index