我编写了一个宏,该宏接受要调用的lambda列表并生成一个函数。Lambda总是在defun参数列表中求值,而不是在中defmacro。如何避免拨打电话到eval内部defmacro?
此代码有效:
(defmacro defactor (name &rest fns)
(let ((actors (gensym)))
`(let (;(,actors ',fns)
(,actors (loop for actor in ',fns
collect (eval actor)))) ; This eval I want to avoid
(mapcar #'(lambda (x) (format t "Actor (type ~a): [~a]~&" (type-of x) x)) ,actors)
(defun ,name (in out &optional (pos 0))
(assert (stringp in))
(assert (streamp out))
(assert (or (plusp pos) (zerop pos)))
(loop for actor in ,actors
when (funcall actor in out pos) …Run Code Online (Sandbox Code Playgroud)