; 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)
OyBjb21tYSBxdWliYmxpbmcKCihkZWZpbmUgKHF1aWJibGUgLiBhcmdzKQogIChjb25kICgobnVsbD8gYXJncykgIiIpCiAgICAgICAgKChudWxsPyAoY2RyIGFyZ3MpKSAoY2FyIGFyZ3MpKQogICAgICAgIChlbHNlIChsZXQgKChhcmdzIChyZXZlcnNlIGFyZ3MpKSkKICAgICAgICAgICAgICAgIChsZXQgbG9vcCAoKGFyZ3MgKGNkZHIgYXJncykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JkcyAobGlzdCAoc3RyaW5nLWFwcGVuZCAoY2FkciBhcmdzKSAiIGFuZCAiIChjYXIgYXJncykpKSkpCiAgICAgICAgICAgICAgICAgIChpZiAobnVsbD8gYXJncykgKGFwcGx5IHN0cmluZy1hcHBlbmQgd29yZHMpCiAgICAgICAgICAgICAgICAgICAgKGxvb3AgKGNkciBhcmdzKSAoY29ucyAoY2FyIGFyZ3MpIChjb25zICIsICIgd29yZHMpKSkpKSkpKSkKCihkaXNwbGF5IChxdWliYmxlKSkgKG5ld2xpbmUpCihkaXNwbGF5IChxdWliYmxlICJBQkMiKSkgKG5ld2xpbmUpCihkaXNwbGF5IChxdWliYmxlICJBQkMiICJERUYiKSkgKG5ld2xpbmUpCihkaXNwbGF5IChxdWliYmxlICJBQkMiICJERUYiICJHIiAiSCIpKSAobmV3bGluZSk=