次の 2 つの Racket コードを考えてみましょう。
;version A
(define-syntax (b stx)
(syntax-case stx () [(X u) #'(display (syntax->datum #'(X u v)))]))
(b 1)
と
;version B
(define-for-syntax (g stx)
(syntax-case stx () [(X u) #'(display (syntax->datum #'(X u v)))]))
(define-syntax (b s) (g s))
(b 1)
実験的に、両方のプログラムが を返し(b 1 v)
ます。質問: 「バージョン B」は有効なラケットですか? もしそうなら、それは「バージョンA」と完全に同等ですか?