>>11
1 2 3がそれぞれ評価されるべきじゃないでしょうか。

意味論的には実装上のトリックというだけで、
fooが単一式である必要はないですよね?
多値みたいな特別なコンテナとして持っとけばいいんじゃないでしょうか。
引数も持たせて、
(sym-macro (foo n) `(define a ,n) `(define b ,(+ n 1)) `(define c ,(+ n 2)))
(foo 1)で(define a 1) (define b 2) (define c 3)
が定義できたりしてbeginも不要になったり自由度が増えるんじゃないかな。