#lang plai/mutator
(allocator-setup "../good-collectors/good-collector.ss" 68)

(define (length-accum lst len)
  (if (empty? lst)
      len
      (length-accum (rest lst) (+ 1 len))))

(define (length lst)
  (length-accum lst 0))

(define (fact/acc n a)
  (if (zero? n)
      a
      (fact/acc (- n 1) (* n a))))

(test/value=? (length '(1 2 3 4)) 4)
(test/value=? (fact/acc 40 1) 815915283247897734345611269596115894272000000000)
