2009-07-14 9 views
11

पुस्तक, रियल वर्ल्ड हास्केल खरीदने से पहले, मैंने वेब पर विभिन्न हास्केल संसाधनों को देखा। अन्यथा उत्कृष्ट होने के नाते, इसमें ऐसी कुछ समझें शामिल नहीं हैं जो मैंने देखा है, मैंने देखा कि विभिन्न वेबसाइटों में मैंने जो उल्लेख किया है। क्या यह सिर्फ इसलिए हो सकता है क्योंकि वे आम तौर पर किसी कारण से लिखित हास्केल में अप्रयुक्त होते हैं, या यह कुछ और जटिल है? उदाहरण के लिए अजीब दिखने वाला सिंटैक्स अनुमानतः उन ऑपरेटरों के कुछ समामेलन हो सकता है जिन्हें मैंने अभी तक नहीं देखा है।सूची समझें हास्केल का एक प्रमुख हिस्सा हैं?

+0

ऑनलाइन पुस्तक में अध्याय 12 में सूची की समझ (संक्षेप में) चर्चा की गई है: http://book.realworldhaskell.org/read/barcode-recognition.html#x_iF1 – mipadi

उत्तर

22

सूची समझों का संक्षेप में Chapter 12 में उल्लेख किया गया है।

मैं अपने आप को मानचित्र के संयोजनों का उपयोग करके ढूंढता हूं और हास्केल में सूची समझों की तुलना में अधिक बार फ़िल्टर करता हूं, लेकिन पायथन में मैं अक्सर सूची समझ का उपयोग करता हूं। तो मुझे लगता है कि इसका हिस्सा निजी शैली है।

एक बार जब आप समझते हैं कि सूची समझ के प्रत्येक भाग का उपयोग कैसे किया जाए, तो सूची समझ के संबंध में आपके लिए क्या सीखना है? आपके पास लौटाई गई सूची के लिए आपके इनपुट, आपकी शर्तें/गार्ड और आपके फ़ंक्शन एप्लिकेशन हैं। मुझे वास्तव में किसी पुस्तक में सूची समझ के बारे में एक बड़े खंड के लिए जरूरी आवश्यकता नहीं दिखाई देती है।

+1

मैं यहां सहमत हूं, मैं शायद ही कभी सूची समझ चीनी से परेशान हूं । – jrockway

+4

+1) सूची की समझ सिर्फ चीनी है ... हालांकि वे वास्तव में ठंडा हो सकते थे अगर उन्हें किसी भी 'मोनाडप्लस' के लिए परिभाषित किया गया था और न केवल '[ए] '...;) – Dario

+4

@ डारियो - पूछें और आपको प्राप्त होगा : http://hackage.haskell.org/trac/ghc/wiki/MonadComprehensions –

5

सूची समझ बाध्यकारी के लिए वाक्य रचनात्मक चीनी हैं (जैसा कि एक मोनैड की बाइंड में) सूचियां हैं।

इसके लिए अन्य वाक्य रचनात्मक चीनी डू-नोटेशन है। इम्हो यह अच्छा है, और बड़ा प्लस यह है कि यह सभी monads के लिए काम करता है।

यदि सूची की समझ मौजूद नहीं है, तो मेरा मानना ​​है कि सीखने के लिए एक कम चीज़ होगी, और कुछ भी नहीं खो गया था (आप इसके बजाय डू-नोटेशन का उपयोग कर सकते हैं)।

सूची समझ के पक्ष में तर्क यह है कि यह उपयोगकर्ता को यह स्पष्ट करेगा कि यह एक सूची है। इम्हो एक प्रकार का हस्ताक्षर उसके लिए बेहतर काम करेगा।

14

हास्केल को वाक्य रचनात्मक विकल्पों के समृद्ध सेट से घिरा कोर भाषा कार्यक्षमता का एक छोटा सा सेट करके परिभाषित किया गया है। सूची की समझ एक विकल्प है, लेकिन वे कुछ भी नहीं प्रदान करते हैं कि मोनड चीनी जो आरडब्ल्यूएच पूरी पुस्तक निर्माण के लिए अंतर्ज्ञान खर्च करती है, वह भी प्रदान नहीं करती है। ऐसे कई मामले हैं जहां हास्केल एक ही चीज़ के लिए दो वाक्यविन्यास प्रदान करता है, बनाम बनाम, केस और संयोजक उन्मुख प्रोग्रामिंग शैली, और सूची समझ और मोनड चीनी।

सूची समझ मूल रूप से मोनाद समझ के रूप में लागू की गई थी, एक तथ्य जो "9 8 की महान मोनोमोर्फिज़ेशन क्रांति" (उर्फ हास्केल '9 8) में बदल गया। वास्तव में, .NET भाषाओं में LINQ का डिज़ाइन पुराने मोनड समझ डिजाइन से भारी रूप से प्राप्त होता है। सूची की समझ उनके मुकाबले कहीं अधिक सामान्य हो सकती है, लेकिन जानबूझकर अपंग संदेशों को समझने के लिए उन्हें उपज बनाने के लिए अपंग हो गई थी।

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

उस ने कहा, अध्याय 12 में उनके बारे में एक संक्षिप्त उल्लेख है। उस बिंदु तक अंतर्निहित अवधारणाओं के लिए पर्याप्त अंतर्ज्ञान बनाया गया है कि वे वास्तव में एक खतरे नहीं हैं।

अंत में, पुस्तक का नाम रियल वर्ल्ड हास्केल है। यह आपको अच्छी असली दुनिया प्रोग्रामिंग तकनीक सिखाना चाहता है। कई Haskellers (सभी नहीं) सूची समझ से बचें क्योंकि नोटेशन अच्छी तरह से स्केल नहीं करता है, और अंततः, आप वापस आना और एक मोनैड ट्रांसफॉर्मर या कुछ को फिर से निकालना चाहते हैं और monadic में समझ कोड के पूरे swathes rewriting हवा शैली वैसे भी।

[अद्यतन: अब जीएचसी monad comprehensions वापस प्राप्त हुआ है, यह आपत्ति उतनी मजबूत नहीं है जितनी यह होती थी। आप उनमें से कुछ रोचक नई कार्यक्षमता प्राप्त कर सकते हैं।]

2

मैं आरडब्ल्यूएच में सूची समझ के three mentions देखता हूं।

7

सूची की समझ ज्यादातर छोटी सूची-प्रसंस्करण उदाहरणों में दिखाई देती है, जिनमें से कई स्वाद में अत्यधिक गणितीय होने का इरादा रखते हैं। जब आप रियल वर्ल्ड हास्केल में शामिल किए गए बड़े ऐप्स में शामिल होना शुरू करते हैं, तो सूची प्रक्रिया कोड के आनुपातिक रूप से बहुत छोटे हिस्से में होती है। और जैसा कि ध्यान दिया गया है, यह अक्सर map, filter, fold, zip का उपयोग करने के लिए सुविधाजनक है, और इसी तरह, क्योंकि यह एक सूची समझ का उपयोग करना है।

तो

  • वास्तविक दुनिया हास्केल प्रोग्राम में, केवल कोड की एक छोटा सा अंश सूचियों संसाधित करता है।

  • सूची-प्रसंस्करण का उपयोग करके लिखे जाने पर सूची-प्रसंस्करण हास्केल कोड का केवल एक छोटा सा अंश महत्वपूर्ण रूप से अच्छा होता है।

लगभग सभी सूची समझें जो मैं लिखता हूं, जोड़ों की सूचियां उत्पन्न करने के लिए बाहर निकलती हैं। मुझे यकीन नहीं है कि उसमें कुछ भी पढ़ा जाना चाहिए।

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