我需要传递函数并用指定的参数调用它。如何正确地传递lambda函数,以宏观和避免这个错误:如何将lambda传递给宏?
APPLY: #'(LAMBDA (X) (+ X 1)) is not a function name; try using a symbol instead
代码:
(defmacro runner (fun &rest arg)
(apply fun arg))
电话:
(runner #'(lambda (x) (+ x 1)) '(1))
这有什么错我的代码?试过类似+
函数,一切正常。
更新: 程序应该为每个参数调用指定的函数并返回结果。参数是列表。所以我应该通过不同的功能列表。
(setq l1 (list 1 2 3))
(setq l2 (list 2 3 4))
(setq l3 (list 3 4 5))
(defmacro runner (fun &rest arg)
; some code
)
(defun summer (l)
(reduce #'+ l))
(print (runner summer l1 l2 l3))
就像这样,但具有任意数量的参数。
(defun runner (l)
(mapcar #'(lambda (x) (summer x)) l))
(print (runner (list l1 l2 l3)))
你为什么要用宏而不是函数来做这件事?宏在编译时用于扩展代码。 – Barmar
我需要使用语法创建宏(do-this function(list1)(list2)...(listn))并执行诸如mapcar之类的操作,但使用列表并返回新值。 – solomkinmv