如何在Racket中将define-syntax与syntax-case分开

时间:2013-06-06 15:49:47

标签: macros 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”?

1 个答案:

答案 0 :(得分:3)

是的,这两个都很好,并且做了完全相同的事情,正如你所注意到的那样。