http://www.scheme.com/tspl2d/ 読み始めました。
Exercise 3.2.6: OR の定義として
A) (define-syntax or
(syntax-rules ()
((_) #f)
((_ e) e)
((_ e1 e2 e3 ...)
(let ((t e1))
(if t t (or e2 e3 ...))))))
が正しくて
B) (define-syntax or
(syntax-rules ()
((_) #f)
((_ e1 e2 ...)
(let ((t e1))
(if t t (or e2 ...))))))
が正しくないわけを述べよ、というのがあります。
これの答えは
(or e1 e2) について、A では e2 が tail call になるが、
B では e2 が tail call ではなくなる(すなわち規格の要求から外
れる)から、だと思うのですが、あっていますか?

※ (or e1 e2) を展開すると、
A: (or e1 e2) => (let ((t e1)) (if t t (or e2)))
=> (let ((t e1)) (if t t e2))
B: (or e1 e2) => (let ((t e1)) (if t t (or e2)))
=> (let ((t e1))
(if t t
(let ((t2 e2)) (if t2 t2 #f))))