Elisp で関数を返す関数を作成しました。
(defun singleton-set (elem)
(defun f (n) (= n elem))
f)
これを IELM で実行しようとすると、失敗します。
ELISP> (singleton-set 5)
*** Eval error *** Symbol's value as variable is void: f
ELISP> ((singleton-set 5) 5)
*** Eval error *** Invalid function: (singleton-set 5)
Lisp-1 と Lisp-2 の違いは何ですか? 私はコードをに変更しました
(defun singleton-set (elem)
(defun f (n) (= n elem))
#'f)
への呼び出し(funcall (singleton-set 5) 5)
ですが、現在エラーは
*** Eval error *** Symbol's value as variable is void: elem
elisp:capture variable from inner function から、これは Emacs Lisp の動的バインディングによるものだと理解しています。
Emacs Lispで関数を返す関数を可能にする方法は? このメカニズムが Python、Scala、Clojure などの他の言語と異なる理由は何ですか?
関連する質問: