(define (eval-unless exp env) (eval# (make-if (unless-conditional exp) (unless-exceptional exp) (unless-usual exp)) env)) (define (unless-conditional exp) (cadr exp)) (define (unless-usual exp) (caddr exp)) (define (unless-exceptional exp) (if (not (null? (cdddr exp))) (cadddr exp) 'false))
I can’t think of a reason why you would want to have unless as a procedure rather than a special form but the same goes for if. Perhaps there is some kind of logical analysis where it’s necessary to use
filter with unless as the procedure or we may need to write a procedure at a higher level of abstraction that can take
when as arguments to evaluate its results.