我有这样的代码:
(define-syntax macron
(syntax-rules ()
((_ name)
(lambda (x)
(eval (cons 'name x) (interaction-environment))))))
(define x (map (macron lambda)
'(((x) (display x)) ((a b) (+ a b)))))
(let ((square (car x))
(sum (cadr x)))
(display (square 10))
(newline)
(display (sum 1 2 3))
(newline))
代码正在工作,它通过用 lambda 包装宏作为值。我的问题是如何将语法规则宏文字符号放入其中,'name
而不是(cons 'lambda ...)
输出代码为:
(lambda (x)
(eval (cons 'name x) (interaction-environment)))
所以它可以使用这样的代码:
(define (name x)
(display x)
(newline))
(for-each (macron lambda) ;; lambda can be anything
'((1) (2) (3)))
它打印所有的数字。
我知道我可以将模式中的名称更改为其他名称,但我想了解更多关于语法规则及其边缘情况的信息。那么,如果我将其用作输入模式,是否可以有名称?
我正在寻找 R7RS 的答案,它涵盖了更多此类边缘情况。