反則の解
empty-env が戻す手続きオブジェクトは error 手続きを呼び出して例外を発生させる。
(define empty-env (lambda () (lambda (sym) (eopl:error 'apply-env "No binding for ~s" sym))))
Gauche では guard という手続きがあるので has-association? はこうすれば楽。
(define has-association? (lambda (env sym) (guard (e (else #f)) (env sym) #t)))
試験にはパスするんですが標記の通り、問題の趣意には沿っていないと思われます。