Macros 如何在common lisp中重新实现反引号?

Macros 如何在common lisp中重新实现反引号?,macros,common-lisp,quote,Macros,Common Lisp,Quote,我必须在不使用内置读卡器宏`、@ 预期的行为是: > (BACKQUOTE (A B (LIST ‘C ‘D) (COMA (LIST ‘E ‘F) (COMA-AT (LIST ‘G ‘H))) (A B (LIST ‘C ‘D) (E F) G H) 我试着用一个宏来做,但结果并不是预期的 非常感谢 有什么可以做的提示吗?有一个例子适用于那些在试图理解paul graham代码的同时,很好地接受了一个简单且不正确的解决方案

我必须在不使用内置读卡器宏`、@ 预期的行为是:

> (BACKQUOTE (A B (LIST ‘C ‘D) (COMA (LIST ‘E ‘F)
                               (COMA-AT (LIST ‘G ‘H)))
(A B (LIST ‘C ‘D) (E F) G H)
我试着用一个宏来做,但结果并不是预期的

非常感谢


有什么可以做的提示吗?

有一个例子

适用于那些在试图理解paul graham代码的同时,很好地接受了一个简单且不正确的解决方案的人:

(defmacro backquote (expr)
  (labels
      ((step (p n)
             (append p
                     (if (atom n) (list n)
                       (case (car n)
                         ('comma (list (eval (cadr n))))
                         ('comma-at (eval (cadr n))))))))
    (list 'quote (reduce #'step (cons () expr)))))

欢迎修改和建议,以改善它

嗯,我只是问,因为这个例子是一个完整的反报价,比我的“基本”家庭作业需要更多的功能,但无论如何,谢谢你,我会尝试去理解它