最近 Emacs Lisp を使い始めた者ですが、

(defun foo (func)
 (funcall func))

(defun bar (func)
 (foo #'(lambda () (print "bar") (funcall func))))

(defun test ()
 (bar #'(lambda () (print "test"))))

> (test)
"bar"
"bar"
"bar"
:

上記のような関数が foo 内で無限ループして、
"Lisp nesting exceeds max-lisp-eval-depth"
というエラーになってしまいます。
foo の仮引数 func と bar の仮引数 func を別の名前に
変更すれば期待通りに動作します。
しかし、foo がライブラリ関数で、bar がユーザの関数で
あるような場合、ユーザがたまたま func という変数を使っ
てしまうと無限ループしてしまいます。
ライブラリ関数として高階関数を使う場面は多いと思うの
ですが、このような状況をどのように回避したらよいので
しょうか?
ちなみに Common Lisp では上記のような現象は起こりません。