小编Ale*_*opa的帖子

如何在defmacro中避免评估?

我编写了一个宏,该宏接受要调用的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)

macros common-lisp

2
推荐指数
1
解决办法
74
查看次数

标签 统计

common-lisp ×1

macros ×1