首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MIT计划中进行宏扩展-1和宏扩展?

如何在MIT计划中进行宏扩展-1和宏扩展?
EN

Stack Overflow用户
提问于 2020-03-03 06:43:23
回答 1查看 274关注 0票数 2

在Common中,我可以定义一个两级宏并展开宏,如下所示:

代码语言:javascript
复制
(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))

输出:

代码语言:javascript
复制
20
(CALC 10 + 10)
(+ 10 10)

现在,我在麻省理工学院计划中尝试做同样的事情:

代码语言:javascript
复制
(define-syntax calc
  (syntax-rules ()
    ((_ a op b)
     (op a b))))

(define-syntax twice
  (syntax-rules ()
    ((_ x)
     (calc x + x))))

(twice 10)

我如何在麻省理工学院计划中完成相当于macroexpand-1macroexpand的工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-03 21:38:17

在球拍中,macroexpand应该是

代码语言:javascript
复制
(syntax->datum
  (expand-to-top-form '(twice 10)))
;; '(+ 10 10)

macroexpand-1将会是

代码语言:javascript
复制
(syntax->datum (expand-once '(twice 10)))
;; '(calc 10 + 10)

有费莱森先生在方案中进行宏观调试的论文。见这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60501453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档