SICP

魔術師本にSchemeによるSchemeの実装があるのですが、可変長引数には対応していないみたい。

; SICP2 P225 新しいフレームを追加する。
(define (extend-environment vars vals base-env)
    (if (= (length vars) (length vals))
        (cons (make-frame vars vals) base-env)
        (if (< (length vars) (length vals))
            (error "Too many arguments supplied" vars vals)
            (error "Too few arguments supplied" vars vals))))

これをJavaに移植しているので、当然こちらも可変長引数は動きません。
で、Java側のコレにあたるところを変更したところ、可変長引数にも対応できるようになりました。

(define (and . args)
    (cond
        ((null? args) #t)
        ((not (car args)) #f)
        (else (apply and (cdr args)))))
(and #t #f #t)   ; => #f