यहाँ एक उदाहरण है:
(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
उस पर है कि विस्तार कदम से एक निशान है, लेकिन compare-with-x
में x
नहीं है, इसलिए bound-identifier=?
उन्हें अलग मानता है करता go
द्वारा शुरू की गई है।
यहाँ एक और उदाहरण है:
(define-syntax (compare-xs stx)
(syntax-case stx()
[(_ x1 x2)
(with-syntax ([free=? (free-identifier=? #'x2 #'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
भी परिचय एक निशान के साथ एक x
, जबकि x
go2
को दिया के रूप में एक तर्क एक निशान भी नहीं है। वही कहानी।
स्रोत
2011-07-27 23:29:17
संबंधित [मुक्त पहचानकर्ता = कैसे करता है? और बाध्य पहचानकर्ता =? काम करता है?] (http://groups.google.com/group/plt-scheme/browse_thread/thread/1f95b5c0f8540f93) –
देखें [यह ईमेल] (http://lists.racket-lang.org/users/archive/2011 -एप्रिल/045117.html) रैकेट मेलिंग सूची, और आसपास के धागे पर। –
मैं समझता हूं कि इन कार्यों का क्या उपयोग किया जाना चाहिए, और मैं समझता हूं कि वे किस तरह से परिभाषित किए गए हैं (अंक और प्रतिस्थापन के मामले में)। मुझे परेशान करने में परेशानी हो रही है वह परिस्थितियां जिसमें वे अलग-अलग परिणाम दे सकते हैं। एक कोड उदाहरण (भले ही काफी अर्थहीन) इससे मदद मिलेगी। – jahhaj