2015-04-30 6 views
15

निम्न उदाहरण पर विचार करें:रैकेट में 'मिलान' क्या बाहरी क्षेत्र से चर के साथ पैटर्न हो सकता है?

#lang racket 

(match '(cat . doge) 
    [`(,a . ,b) 
    (match b 
    [a #t] 
    [_ #f])] 
    [_ "Not a pair"]) 

यह अगर मैं जोड़े जहां सिर और पूंछ ही कर रहे हैं मैच के लिए चाहते थे कि मैं क्या लिख ​​सकते है। यह काम नहीं करता है क्योंकि दूसरा a एक नया चर (और कुछ भी मेल खाता है) के रूप में बाध्य है। क्या कोई पैटर्न रूप है जो मुझे बाहरी दायरे से पहले a का उपयोग करने की अनुमति देता है?

मैं जानता हूँ कि यह निम्नलिखित तरीके

(match* ('cat 'doge) 
    [(a a) #t] 
    [(_ _) #f]) 

में प्राप्त किया जा सकता लेकिन मैं अभी भी अगर वहाँ बाहरी दायरे से उस चर पाने के लिए एक तरीका है (या जानना चाहते हैं, अगर वहाँ नहीं करने के लिए एक कारण है ऐसा करने, कुछ संभावित नाम टक्कर समस्या या कुछ की तरह)।

उत्तर

14

उपयोग ==:

कारण डॉक्स में नियुक्ति के लिए
(match '(cat . doge) 
    [`(,a . ,b) 
    (match b 
    [(== a) #t] 
    [_  #f])] 
    [_ "Not a pair"]) 

, == को नजरअंदाज करना आसान है।

+3

अनदेखा करना भी आसान है '#: कब'। उदाहरण के लिए, खंड '[(विपक्ष बी) #: हो सकता है जब (eq? A b) #t]'। बेशक '==' इस उदाहरण में सरल है। –

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