【发布时间】:2016-11-02 05:35:55
【问题描述】:
'when' 的这些实现之间到底有什么不同?
(define-syntax when
(syntax-rules ()
((_ pred b1 ...)
(if pred (begin b1 ...)))))
对比
(define (my-when pred b1 ...)
(if pred (begin b1 ...)))
例如,当这个 for 循环宏中使用 'my-when' 时:
(define-syntax for
(syntax-rules ()
((_ (i from to) b1 ...)
(let loop((i from))
(my-when (< i to)
b1 ...
(loop (+ i 1)))))))
发生错误:
(for (i 0 10) (显示 i))
;中止!:超出最大递归深度
我不认为'when'可以实现为一个函数,但我不知道为什么......
【问题讨论】:
标签: macros scheme mit-scheme