【发布时间】:2012-09-22 17:58:31
【问题描述】:
为了了解 Scheme 宏的工作原理,我正在尝试定义一个新命令 sum,它的工作方式与常见的 operator + 完全相同(即参数数量未定义)。
我编写了这段代码:
(define-syntax sum
(syntax-rules ()
((_ arg1 arg2 args...)
(sum (+ arg1 arg2) args...))
((_ arg1 arg2)
(+ arg1 arg2))
((_ arg1)
arg1)))
如果我传递 1、2 或 3 个参数,它会起作用。但是有 4 个参数我得到了这个错误:
sum: bad syntax in: (sum 1 2 3 4)
我尝试使用 DrRacket 逐步扩展宏,但它立即停止。
谁能解释一下这个错误的原因?
【问题讨论】: