Emacs Lisp
■ このスレッドは過去ログ倉庫に格納されています
0584デフォルトの名無しさん
NGNG(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 では上記のような現象は起こりません。
■ このスレッドは過去ログ倉庫に格納されています