最近のバージョンの Emacs は、elisp コード内の変数の字句バインディングをサポートしています。関数を字句的に再定義することも可能ですか? つまり、Emacs Lisp には次のようなものがありlexical-flet
ますか?
質問する
699 次
2 に答える
4
Emacs<24.3 では、 を(require 'cl)
使用できますlabels
。Emacs-24.3 以降では、実行してから または のいずれか(require 'cl-lib)
を使用することもできます。cl-flet
cl-labels
これらはすべて、のようなコードを生成する「複雑なマクロ」です(let ((fun (lambda (args) (body)))) ... (funcall fun my-args) ...)
。これは、基礎となる言語がローカル関数定義をネイティブにサポートしていないためです。
于 2012-12-13T01:36:21.817 に答える
2
ありますがlabels
、それがあなたが探しているものであるかどうかはわかりません:
(defun foo ()
42)
(defun bar ()
(foo))
(list
(foo)
(bar)
(labels ((foo ()
12))
(list (foo)
(bar)))
(foo)
(bar))
を返します(42 42 (12 42) 42 42)
。
于 2012-12-12T22:11:39.657 に答える