我想要一个创建新标识符的宏,如
(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”绑定的值,那么它应该影响新创建的过程。
答案 0 :(得分:2)
几天前就有关Reddit的讨论了。可能值得研究发布的实施更多细节 - http://www.reddit.com/r/scheme/comments/f54dk/i_wrote_an_hygienic_definemacro_that_can_capture/
答案 1 :(得分:0)
你不能在纯粹的R5RS中做到这一点。幸运的是,除了有限的R5RS卫生之外,大多数流行的Scheme实现提供了一个合适的宏系统:
(define-macro (new-name a b) (string->symbol (string-append (symbol->string a) "-" (symbol->string b))))