free-identifier =を理解しようとしていますか?およびbound-identifier=?。free-identifier =を使用する場合の同等のコード例を誰かに教えてもらえますか?trueを返し、bound-identifier =を使用しますか?falseを返します。
ありがとう
次に例を示します。
(define-syntax (compare-with-x stx)
(syntax-case stx ()
[(_ x-in)
(with-syntax ([free=? (free-identifier=? #'x-in #'x)]
[bound=? (bound-identifier=? #'x-in #'x)])
#'(list free=? bound=?))]))
(define-syntax go
(syntax-rules ()
[(go) (compare-with-x x)]))
(go) ;; => '(#t #f)
x
によって導入されたには、そのgo
拡張ステップからのマークがありますが、x
インにcompare-with-x
はないので、bound-identifier=?
それらは異なると見なされます。
別の例を次に示します。
(define-syntax (compare-xs stx)
(syntax-case stx ()
[(_ x1 x2)
(with-syntax ([free=? (free-identifier=? #'x1 #'x2)]
[bound=? (bound-identifier=? #'x1 #'x2)])
#'(list free=? bound=?))]))
(define-syntax go2
(syntax-rules ()
[(go2 x-in) (compare-xs x-in x)]))
(go2 x) ;; => '(#t #f)
ここでもマーク付きのをgo2
紹介しますが、引数として与えられたtoにはマークがありません。同じ話。x
x
go2