首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在guile方案中,如何在外部宏和内部宏之间共享语法?

在guile方案中,如何在外部宏和内部宏之间共享语法?
EN

Stack Overflow用户
提问于 2020-08-01 03:35:29
回答 1查看 53关注 0票数 0

在Guile方案中,我有一个调用另一个宏的宏,并且我希望对内部宏的调用引用内部宏中使用的符号。这里有一个简单的例子来说明我正在尝试获得的东西:

代码语言:javascript
复制
(define-syntax macro1 
  (lambda (x)
    (syntax-case x ()
      ((macro1 expr1)
       (with-syntax ((f (datum->syntax x 'f)))
         #'(lambda (f) expr1))))))

(define-syntax macro2 (lambda (x)
  (syntax-case x ()
    ((macro2 expr2)
     #'(macro1 (expr2 f))))))

((macro2 1+) 2)

我期望最后一行返回3,但是我得到了以下错误:

代码语言:javascript
复制
;;; <stdin>:142:0: warning: possibly unbound variable `f'
ice-9/boot-9.scm:1669:16: In procedure raise-exception:
Unbound variable: f

可以做我想做的事吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-01 12:22:04

好了,我发现了如何做到这一点。我必须在datum->syntax调用中使用#‘宏1而不是x:

代码语言:javascript
复制
(define-syntax macro1 
  (lambda (x)
    (syntax-case x ()
      ((macro1 expr1)
       (with-syntax ((f (datum->syntax #'macro1 'f)))
         #'(lambda (f) expr1))))))

(define-syntax macro2 (lambda (x)
  (syntax-case x ()
    ((macro2 expr2)
     #'(macro1 (expr2 f))))))

我不确定为什么它不适用于x,并且我在手册中找不到任何解释。

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

https://stackoverflow.com/questions/63198107

复制
相关文章

相似问题

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