; comma quibbling

(define (quibble . args)
  (cond ((null? args) "")
        ((null? (cdr args)) (car args))
        (else (let ((args (reverse args)))
                (let loop ((args (cddr args))
                           (words (list (string-append (cadr args) " and " (car args)))))
                  (if (null? args) (apply string-append words)
                    (loop (cdr args) (cons (car args) (cons ", " words)))))))))

(display (quibble)) (newline)
(display (quibble "ABC")) (newline)
(display (quibble "ABC" "DEF")) (newline)
(display (quibble "ABC" "DEF" "G" "H")) (newline)