क्या इसमें कंपाइलर अनुकूलन के साथ कुछ भी करना है?
नहीं, वास्तव में एक कह सकते हैं कि लेखन null (_:_)
null any
की तुलना में कम कुशल है (मामले में संकलक इस का अनुकूलन नहीं करता है), के बाद से अब आप को सत्यापित करने के हास्केल है कि यह वास्तव में "विपक्ष" है पूछो। यद्यपि यदि एक कंपाइलर डेटा प्रकारों पर कुछ बहीखाता करता है, तो इसे दूर करने के लिए निश्चित रूप से आसान है। जहां तक मुझे पता है, ghc
और लगभग जैसे अधिकांश कंपाइलर तीन साल के बच्चों द्वारा लिखे गए सभी कंपाइलर्स वास्तव में ऐसा करेंगे।
सबसे पहले यह बेहतर है एक सूची की परिभाषा के बाद से एक wilcard _
(या नाम यह any
) लिखने के लिए नहीं (और किसी भी अन्य डेटा-प्रकार बदल सकता है)। हालांकि एक सूची के लिए बाधाएं बहुत ही असंभव हैं, लेकिन यह संभव हो सकता है कि कोई सूची को फिर से परिभाषित कर सके। उदाहरण के लिए:
data [a] = [] | (a:[a]) | (Int///[a])
उदाहरण के लिए बाद वाले पैटर्न का अर्थ है कि सूची कई बार दोहराई जाती है। उस स्थिति में, संकलक तीन वर्षीय बच्चे द्वारा लिखे गए नहीं हैं :) चेतावनी देगा कि null
के लिए अपूर्ण पैटर्न: इस प्रकार यह दावा करेगा कि (_///_)
पैटर्न निर्दिष्ट नहीं किया गया था। जबकि यदि आप वाइल्डकार्ड का उपयोग करते हैं, तो यह null any
मामले में गिर जाएगी।
सामान्य रूप से देखभाल के साथ वाइल्डकार्ड का बेहतर उपयोग करता है: केवल अगर आप वास्तव में फ़ंक्शन को दिए गए कार्यों की परवाह नहीं करते हैं, तो आपको वाइल्डकार्ड का उपयोग करना चाहिए।
स्रोत
2017-10-11 15:11:00
नहीं। कोई फर्क नहीं पड़ता। परिभाषा यह बेहद स्पष्ट करती है कि कुछ भी याद नहीं किया गया था, लेकिन सूचियों के लिए जो वास्तव में एक बड़ा सौदा नहीं है। – dfeuer
इसके अलावा, आप 'null = all (const झूठा)' परिभाषित कर सकते हैं। शायद यह स्पष्ट होगा। – dfeuer