我目前正在学习一些 r7rs,我正在尝试实现一个宏“开始”,如下所示:
(begin0 expr0 expr1 ... expr2)
expr 是一个正则表达式(Like (set!x (+ x 1)))
begin0 作为一个宏,它计算所有表达式但只返回 expr1 结果。
例如 :
(let ((year 2017))
(begin1 (set! year (+ year 1))
year
(set! year (+ year 1))
year))
它必须返回 2018
我首先创建了一个开始函数:
(define-syntax begin0
(syntax-rules ()
((begin-0 body-expr-0 body-expr-1 ...)
(let ((tmp body-expr-0)) body-expr-1 ... tmp))))
现在,我试图了解如何返回 "body-expr-1" 的值?我已经完成了以下代码,但它说我遗漏了一些省略号,我不明白该怎么做。
(define-syntax begin1
(syntax-rules ()
((begin1 body-expr-0 body-expr-1 ... body-expr-2)
(let ((tmp body-expr-0) body-expr-1 ... tmp)
(cond (eq? tmp body-expr-1)
(begin . tmp))))))
我希望它是可以理解的,谢谢你的回答。