2011-07-23 17 views
7

मुक्त पहचानकर्ता को समझने की कोशिश कर रहे हैं =? और बाध्य पहचानकर्ता =? क्या कोई मुझे समकक्ष कोड उदाहरण दे सकता है जहां फ्री-पहचानकर्ता = का उपयोग कर? सच हो जाएगा और बाध्य पहचानकर्ता = का उपयोग कर? झूठी वापसी होगी।मुक्त पहचानकर्ता के बीच अंतर =? और बाध्य पहचानकर्ता =?

धन्यवाद

+1

संबंधित [मुक्त पहचानकर्ता = कैसे करता है? और बाध्य पहचानकर्ता =? काम करता है?] (http://groups.google.com/group/plt-scheme/browse_thread/thread/1f95b5c0f8540f93) –

+0

देखें [यह ईमेल] (http://lists.racket-lang.org/users/archive/2011 -एप्रिल/045117.html) रैकेट मेलिंग सूची, और आसपास के धागे पर। –

+0

मैं समझता हूं कि इन कार्यों का क्या उपयोग किया जाना चाहिए, और मैं समझता हूं कि वे किस तरह से परिभाषित किए गए हैं (अंक और प्रतिस्थापन के मामले में)। मुझे परेशान करने में परेशानी हो रही है वह परिस्थितियां जिसमें वे अलग-अलग परिणाम दे सकते हैं। एक कोड उदाहरण (भले ही काफी अर्थहीन) इससे मदद मिलेगी। – jahhaj

उत्तर

5

यहाँ एक उदाहरण है:

(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, जबकि xgo2 को दिया के रूप में एक तर्क एक निशान भी नहीं है। वही कहानी।

+0

सरल वास्तव में, धन्यवाद – jahhaj

+0

ध्यान दें कि '(तुलना-के-एक्स एक्स)' का परिणाम भी है '(#t # एफ) '। पहले उदाहरण के लिए 'go' macro की आवश्यकता नहीं है। – soegaard

संबंधित मुद्दे