4

我想要一个创建新标识符的宏,例如

(new-name first second) => first-second

可用于定义新的顶级绑定

(define-syntax define-generic 
  (syntax-rules ()
    ((define-generic (name a b ...))
     (begin
       (define (new-name name data) 15)      ; <= create a new binding
       (define name (lambda (a b ...)
         (add (new-name name-data) 7))))))   ; <= use new identifier

如果我设置!“new-name”绑定的值,那么它应该会影响新创建的过程。

4

2 回答 2

2

就在几天前,Reddit 上对此进行了讨论。可能值得研究发布的更多细节 - http://www.reddit.com/r/scheme/comments/f54dk/i_wrote_an_hygienic_definemacro_that_can_capture/

于 2011-01-28T12:46:06.830 回答
1

你不能在纯 R5RS 中做到这一点。幸运的是,除了有限的 R5RS 卫生内容之外,大多数流行的 Scheme 实现都提供了适当的宏系统:

(define-macro (new-name a b) (string->symbol (string-append (symbol->string a) "-" (symbol->string b))))

于 2011-01-28T12:29:54.030 回答