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