可以编写一个执行一元计算的宏:
(define-syntax 1ary
(syntax-rules ()
((_ (1ary arg))
(let ((1ary-val 1ary)
(arg-val arg))
(1ary-val arg-val)))))
(define (inc x) (+ x 1))
(1ary (inc 0))
但它不适用于语法:
(1ary (quote 0))
如何更改宏以使其适用于语法?
问题是语法不可能作为值传递,因此您尝试计算运算符将会失败,因为
quote
不是像 inc
那样的变量。但这会起作用:
(define-syntax 1ary
(syntax-rules ()
((_ (op arg))
(op arg))))