反則の解

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)))

試験にはパスするんですが標記の通り、問題の趣意には沿っていないと思われます。