只是为了理解 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 逐步扩展宏,但它立即停止。
有人可以解释一下这个错误的原因吗?