【发布时间】:2010-11-14 21:27:26
【问题描述】:
我不知道您是否会称其为规范公式,但要绑定本地函数,GNU 手册建议我使用“flet”:
(defun adder-with-flet (x)
(flet ( (f (x) (+ x 3)) )
(f x))
)
但是,我偶然尝试了(在Scheme中玩了一会儿之后)以下表达式,其中我使用'let'将一个lambda表达式绑定到一个变量,如果我将函数传递给mapcar *,它也可以工作:
(defun adder-with-let (x)
(let ( (f (lambda (x) (+ x 3))) )
(car (mapcar* f (list x)) ))
)
这两个功能都有效:
(adder-with-flet 3) ==> 6
(adder-with-let 3) ==> 6
为什么第二个有效?我找不到任何可以使用“let”将函数绑定到符号的文档。
【问题讨论】:
-
对于任何尝试此操作的人,请注意
flet在您使用的 emacs 版本中可能不可用,在这种情况下,请事先尝试(require 'cl),如下所述(flet是CommonLisp 的东西)。 -
哪个 GNU 手册推荐在这里使用
flet? -
来自 Emacs 25.1.1 描述功能:flet 该宏自 24.3 起已过时;使用
cl-flet' orcl-letf'