可能重复:
如何在Elisp中传递lambda表达式
我有以下代码:
(defun my-map (p l)
(mapcar (lambda (el) (p el)) l))
(defun test ()
(my-map (lambda (x) (+ x 1)) (list 1 2 3)))
Run Code Online (Sandbox Code Playgroud)
(这是一个例子 - 不是我试图编写的实际代码).它抱怨它找不到函数p:
Debugger entered--Lisp error: (void-function p)
(p el)
(lambda (el) (p el))(1)
mapcar((lambda (el) (p el)) (1 2 3))
my-map((lambda (x) (x + 1)) (1 2 3))
test()
eval((test) nil)
eval-expression((test) nil)
call-interactively(eval-expression nil nil)
recursive-edit()
debug(error (void-variable test))
eval(test nil)
eval-expression(test nil)
call-interactively(eval-expression nil nil
Run Code Online (Sandbox Code Playgroud)
我猜它p在外部范围内将a 视为符号而不是变量.如何使它工作?
小智 8
你想用funcall.
funcall是`C源代码'中的内置函数.
(funcall FUNCTION&rest ARGUMENTS)
将第一个参数作为函数调用,将剩余的参数传递给它.返回函数返回的值.因此,(funcall'cons'x'y)返回(x.y).