; list homework

(define (len xs)
  (if (null? xs) 0
    (+ (len (cdr xs)) 1)))

(display (len '(1 2 3 4 5))) (newline)

(define (len-aux xs len)
  (if (null? xs) len
    (len-aux (cdr xs) (+ len 1))))

(define (len xs) (len-aux xs 0))

(display (len '(1 2 3 4 5))) (newline)

(define (rev-aux xs zs)
  (if (null? xs) zs
    (rev-aux (cdr xs) (cons (car xs) zs))))

(define (rev xs) (rev-aux xs '()))

(display (rev '(1 2 3 4 5))) (newline)