2015-07-20 4 views
12

मैंने हाल ही में पढ़ा है कि पैटर्न मिलान रन-टाइम के दौरान होता है और संकलन-समय नहीं होता है। (मैं स्रोत की तलाश में हूं, लेकिन इस समय इसे नहीं ढूंढ सकता।) क्या यह सच है? और यदि हां, तो क्या कार्य में गार्डों का प्रदर्शन समान होता है?पैटर्न पैटर्न से अधिक प्रदर्शन करने वाला पैटर्न है?

यह पढ़ना मेरे लिए आश्चर्यजनक था क्योंकि मुझे लगता था कि जीएचसी संकलन समय के दौरान कुछ (शायद सभी नहीं) पैटर्न मैच निर्णयों को अनुकूलित करने में सक्षम था। क्या यह बिल्कुल होता है?

उदाहरण के लिए एक मामला:

f 1 = 3 
f 2 = 4 

बनाम

f' a | a == 1 = 3 
    | a == 2 = 4 

f करो और f' निर्देश (जैसे कोर और/कम या में) की एक ही नंबर के लिए संकलन?

यदि स्थिति पैटर्न के बजाय एक निर्माता पर पैटर्न मिलान करता है तो क्या स्थिति अलग होती है? जैसे अगर जीएचसी देखता है कि एक स्थान से एक समारोह हमेशा एक कन्स्ट्रक्टर के साथ बुलाया जाता है, तो क्या यह उस कॉल को अनुकूलित करता है जो रन-टाइम चेक को समाप्त करता है? और यदि हां, तो क्या आप मुझे एक उदाहरण दे सकते हैं जो दिखाता है कि अनुकूलन क्या बनाता है?

सारांश में

क्या प्रदर्शन के मामले में इन दोनों के तरीकों के बारे में पता करने के लिए अच्छा है?

एक बेहतर प्रदर्शन-वार कब होता है?

+4

क्या आप पूछ रहे हैं कि जीएचसी से कोर आउटपुट कैसे प्राप्त करें, या मानदंड का उपयोग कैसे करें? – jberryman

+1

प्रासंगिक: [हास्केल जीएचसी: एन कन्स्ट्रक्टर के साथ पैटर्न मिलान की समय जटिलता क्या है?] (Http://stackoverflow.com/q/9027384/2751851) – duplode

+0

मुझे लगता है कि पैटर्न मिलान तेजी से विचार कर रहा है कि 'ईक' उदाहरण आमतौर पर पैटर्न मिलान पर आधारित होते हैं। – AJFarmar

उत्तर

14

पैटर्न बनाम गार्ड को कभी भी ध्यान न दें, आप if बनाम case के बारे में भी पूछ सकते हैं।

पैटर्न मिलान समानता जांच पर प्राथमिकता है। समानता-जांच वास्तव में हास्केल में करने के लिए एक प्राकृतिक बात नहीं है। Boolean blindness एक समस्या है, लेकिन उस पूर्ण समानता जांच के अलावा अक्सर संभव नहीं है – उदा। अनंत सूचियों की तुलना कभी बराबर नहीं होगी!

इस प्रकार पर अधिक कुशल प्रत्यक्ष पैटर्न मिलान कितना निर्भर करता है। संख्याओं के मामले में, उन पैटर्नों में बहुत अंतर की उम्मीद नहीं है क्योंकि उन पैटर्न हुड समानता जांच के साथ कार्यान्वित किए गए हैं।

मैं आमतौर पर पैटर्न – पसंद करता हूं क्योंकि वे सिर्फ अच्छे हैं और अधिक कुशल हो सकते हैं। समानता जांच या तो महंगी, या संभवतः अधिक महंगे होंगी, और केवल गैर-मूर्खतापूर्ण हैं। जब आपको करना है तो केवल बूलियन मूल्यांकन का उपयोग करें, अन्यथा पैटर्न के साथ चिपके रहें (जो in guards भी हो सकता है)!

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