; alternating lists

(define (alternate . xss)
  (let loop ((xss xss) (zs (list)))
    (display xss) (display " ")
    (display zs) (newline)
    (cond ((null? xss) (reverse zs))
          ((null? (car xss)) (loop (cdr xss) zs))
          (else (loop (append (cdr xss) (list (cdar xss)))
                      (cons (caar xss) zs))))))

(display (alternate '(1 2 3 4 5) '(a b c) '(w x y z)))