; length

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

(display (len '(a b c d e f g))) (newline)

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

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

(display (len '(a b c d e f g))) (newline)

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

(display (len '(a b c d e f g))) (newline)

(define (shorter? xs ys)
  (cond ((null? ys) #f)
        ((null? xs) #t)
        (else (shorter? (cdr xs) (cdr ys)))))

(display (shorter? '(a b c d e f g) '(h i j k l m n o p))) (newline)