我必须重新制作反引号(使用unquote和unquote-splicing)而不使用内置读取器宏`,@ 预期的行为是:
> (BACKQUOTE (A B (LIST ‘C ‘D) (COMA (LIST ‘E ‘F)
(COMA-AT (LIST ‘G ‘H)))
(A B (LIST ‘C ‘D) (E F) G H)
我尝试用宏来做,但结果不是预期的。
非常感谢!!!
可以做些什么的提示?
答案 0 :(得分:3)
答案 1 :(得分:0)
对于那些善于解决一个简单而不正确的解决方案的人,但它有效,同时试图理解保罗格雷厄姆代码:
(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)))))
欢迎提出改进建议的修正和建议!