在Common中,我可以定义一个两级宏并展开宏,如下所示:
(defmacro calc (a op b)
(list op a b))
(defmacro twice (x)
(list 'calc x '+ x))
(twice 10)
(macroexpand-1 '(twice 10))
(macroexpand '(twice 10))输出:
20
(CALC 10 + 10)
(+ 10 10)现在,我在麻省理工学院计划中尝试做同样的事情:
(define-syntax calc
(syntax-rules ()
((_ a op b)
(op a b))))
(define-syntax twice
(syntax-rules ()
((_ x)
(calc x + x))))
(twice 10)我如何在麻省理工学院计划中完成相当于macroexpand-1和macroexpand的工作?
发布于 2020-03-03 21:38:17
在球拍中,macroexpand应该是
(syntax->datum
(expand-to-top-form '(twice 10)))
;; '(+ 10 10)而macroexpand-1将会是
(syntax->datum (expand-once '(twice 10)))
;; '(calc 10 + 10)有费莱森先生在方案中进行宏观调试的论文。见这里。
https://stackoverflow.com/questions/60501453
复制相似问题