हास्केल के साथ शुरुआत करना


755

कुछ दिनों के लिए मैंने हास्केल में कार्यात्मक प्रोग्रामिंग प्रतिमान के चारों ओर अपना सिर लपेटने की कोशिश की है। मैंने ट्यूटोरियल पढ़कर और स्क्रेंकोस्ट देख कर ऐसा किया है, लेकिन वास्तव में कुछ भी नहीं लगता है। अब, विभिन्न अनिवार्य / OO भाषाओं (जैसे C, Java, PHP) को सीखने में, मेरे जाने के लिए व्यायाम एक अच्छा तरीका है। लेकिन जब से मैं वास्तव में नहीं जानता कि हास्केल क्या सक्षम है और क्योंकि उपयोग करने के लिए कई नई अवधारणाएं हैं, मुझे नहीं पता है कि कहां से शुरू करना है।

तो, आपने हास्केल कैसे सीखा? क्या तुमने वास्तव में "बर्फ को तोड़ दिया"? इसके अलावा, व्यायाम शुरू करने के लिए कोई अच्छा विचार?


जवाबों:


2476

मैं इस गाइड को कौशल के स्तर पर ऑर्डर करने जा रहा हूं जो आपके पास हास्केल में है, जो एक विशेषज्ञ के लिए बिल्कुल सही शुरुआत से जा रहा है। ध्यान दें कि इस प्रक्रिया में कई महीने (वर्ष?) लगेंगे, इसलिए यह लंबा है।

बिलकुल शुरुआती

सबसे पहले, हास्केल कुछ भी करने में सक्षम है, पर्याप्त कौशल के साथ। यह बहुत तेज़ है (मेरे अनुभव में केवल C और C ++ के पीछे), और इसका उपयोग सिमुलेशन से सर्वर, गाइस और वेब एप्लिकेशन तक किसी भी चीज़ के लिए किया जा सकता है।

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

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

एक और दो अच्छे संसाधन हैंस्केल प्रोग्रामिंग पहले सिद्धांतों से , और हास्केल में प्रोग्रामिंग । वे दोनों प्रत्येक अध्याय के लिए अभ्यास के साथ आते हैं, इसलिए आपके पास पिछले कुछ पृष्ठों पर सीखी गई छोटी-छोटी सरल समस्याएं हैं।

कोशिश करने के लिए समस्याओं की एक अच्छी सूची है haskell 99 समस्याएं पृष्ठ । ये बहुत बुनियादी शुरू करते हैं, और जैसे-जैसे आगे बढ़ते हैं, और अधिक कठिन होते जाते हैं। यह बहुत अच्छा अभ्यास है उनमें से बहुत से कर रहे हैं, क्योंकि वे आपको अपने कौशल को पुनरावृत्ति और उच्च क्रम कार्यों में अभ्यास करने देते हैं। मैं किसी भी समस्या को रोकने की सिफारिश करूंगा जिसमें यादृच्छिकता की आवश्यकता होती है क्योंकि हास्केल में यह थोड़ा अधिक कठिन है। यदि आप क्विकचेक के साथ अपने समाधान का परीक्षण करना चाहते हैं, तो इस एसओ प्रश्न की जाँच करें ( नीचे इंटरमीडिएट देखें)।

एक बार जब आप उनमें से कुछ कर लेते हैं, तो आप प्रोजेक्ट यूलर की कुछ समस्याओं को करने के लिए आगे बढ़ सकते हैं । ये इस बात से हल हो जाते हैं कि कितने लोगों ने उन्हें पूरा किया है, जो कठिनाई का एक अच्छा संकेत है। ये पिछली समस्याओं से अधिक आपके तर्क और हास्केल का परीक्षण करते हैं, लेकिन आपको अभी भी पहले कुछ करने में सक्षम होना चाहिए। इन समस्याओं के साथ हास्केल का एक बड़ा फायदा यह है कि इंटेगर आकार में सीमित नहीं हैं। इनमें से कुछ समस्याओं को पूरा करने के लिए, आपको एक हास्केल सीखने के लिए अध्याय 7 और 8 को पढ़ना उपयोगी होगा।

शुरुआती

उसके बाद आपके पास पुनरावृत्ति और उच्च क्रम के कार्यों पर एक अच्छा संभाल होना चाहिए, इसलिए यह कुछ और वास्तविक कार्य समस्याओं को शुरू करने का एक अच्छा समय होगा। शुरू करने के लिए एक बहुत अच्छी जगह है रियल वर्ल्ड हास्केल (ऑनलाइन बुक, आप एक हार्ड कॉपी भी खरीद सकते हैं)। मैंने पाया कि पहले कुछ अध्यायों ने बहुत जल्दी किसी ऐसे व्यक्ति के लिए शुरुआत की, जिसने पहले कभी कार्यात्मक प्रोग्रामिंग / पुनरावृत्ति नहीं की थी। हालांकि अभ्यास के साथ आपको पिछली समस्याओं को करने से आपको पूरी तरह से समझने योग्य होना चाहिए।

पुस्तक में समस्याओं के माध्यम से काम करना हास्केल में अमूर्त और पुन: प्रयोज्य घटकों का प्रबंधन करने का एक शानदार तरीका है। यह ऑब्जेक्ट-ओरिएंटेड (oo) प्रोग्रामिंग के लिए उपयोग किए जाने वाले लोगों के लिए महत्वपूर्ण है, क्योंकि सामान्य oo एब्स्ट्रैक्शन मेथड (oo classes) Haskell में नहीं दिखाई देते हैं (Haskell में टाइप क्लासेस होती हैं, लेकिन वे oo क्लासेस के लिए बहुत भिन्न होती हैं, oo इंटरफेस से अधिक )। मुझे नहीं लगता कि यह अध्यायों को छोड़ना एक अच्छा विचार है, क्योंकि प्रत्येक बहुत नए विचारों का परिचय देता है जो बाद के अध्यायों में उपयोग किए जाते हैं।

थोड़ी देर बाद आपको अध्याय 14, खूंखार मोनाडर्स अध्याय (डम डम डममम) मिलेगा। लगभग हर कोई जो हास्केल सीखता है, उसे समझने में परेशानी होती है कि अवधारणा कितनी अमूर्त है। मैं किसी अन्य भाषा में किसी भी अवधारणा के बारे में नहीं सोच सकता जो कि सारगर्भित है क्योंकि मठ कार्यात्मक प्रोग्रामिंग में हैं। मोनाड्स एक विचार के तहत एकीकृत होने के लिए कई विचारों (जैसे कि आईओ संचालन, गणना विफल हो सकता है, पार्सिंग, ...) की अनुमति देता है। यदि आप वास्तव में उन्हें नहीं समझते हैं तो मोनाड अध्याय को पढ़ने के बाद निराश न हों। मुझे भिक्षुओं के कई अलग-अलग स्पष्टीकरणों को पढ़ना उपयोगी लगा; हर एक समस्या पर एक नया दृष्टिकोण देता है। यहाँ monad ट्यूटोरियल्स की बहुत अच्छी सूची है । मैं सभी मोनाड्स के बारे में अत्यधिक अनुशंसा करता हूं , लेकिन अन्य भी अच्छे हैं।

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

यह सुनिश्चित करने के लिए कि आप हास्केल प्रकार प्रणाली को पूरी तरह से समझ रहे हैं, आपको 20 मध्यवर्ती हैस्केल अभ्यासों को हल करने का प्रयास करना चाहिए । "प्यारे" और "केला" जैसे कार्यों के मज़ेदार नामों का उपयोग करने वाले व्यायाम और यदि आपके पास पहले से ही नहीं है तो आपको कुछ बुनियादी कार्यात्मक प्रोग्रामिंग अवधारणाओं की अच्छी समझ रखने में मदद मिलती है। तीर, यूनिकॉर्न, सॉसेज और प्यारे केले के साथ कवर किए गए कागज के एक गुच्छा के साथ अपनी शाम बिताने का अच्छा तरीका।

मध्यम

एक बार जब आप मोनाड्स को समझ लेते हैं, तो मुझे लगता है कि आपने एक शुरुआती हास्केल प्रोग्रामर से एक मध्यवर्ती हस्केलर में संक्रमण किया है। तो यहां से कहां जाएं? पहली चीज़ जो मैं सुझाऊँगा (यदि आपने उन्हें पहले से सीखने वाले साधुओं से नहीं सीखा है) तो पाठक, लेखक और राज्य जैसे विभिन्न प्रकार के भिक्षु हैं। फिर से, असली दुनिया हास्केल और सभी के बारे में भिक्षुओं के महान कवरेज देता है। अपने मॉनड प्रशिक्षण को पूरा करने के लिए मोनाड ट्रांसफार्मर के बारे में सीखना आवश्यक है। ये आपको विभिन्न प्रकार के मोनाड (जैसे रीडर और स्टेट मोनाड) को एक में जोड़ देते हैं। यह शुरू करने के लिए बेकार लग सकता है, लेकिन थोड़ी देर के लिए उनका उपयोग करने के बाद आप आश्चर्य करेंगे कि आप उनके बिना कैसे रहते थे।

यदि आप चाहें तो अब आप असली दुनिया हास्केल पुस्तक को समाप्त कर सकते हैं। अध्यायों को छोड़ना अब वास्तव में कोई मायने नहीं रखता है, जब तक कि आपके पास थपथपाने वाले पैट हैं। बस वही चुनें जो आप में रुचि रखते हैं।

आपके पास अब जो ज्ञान है, उसके साथ आपको कैबेल पर अधिकांश पैकेज (अच्छी तरह से प्रलेखित कम से कम ...) का उपयोग करने में सक्षम होना चाहिए, साथ ही साथ अधिकांश पुस्तकालय जो हास्केल के साथ आते हैं। कोशिश करने के लिए दिलचस्प पुस्तकालयों की एक सूची होगी:

  • पारसेक : पार्सिंग कार्यक्रमों और पाठ के लिए। रेगेक्स का उपयोग करने से बहुत बेहतर है। उत्कृष्ट प्रलेखन, एक वास्तविक दुनिया हास्केल अध्याय भी है।

  • क्विकचेक : एक बहुत अच्छा परीक्षण कार्यक्रम। आप जो करते हैं वह एक विधेय लिखते हैं जो हमेशा सही होना चाहिए (जैसे length (reverse lst) == length lst)। आप फिर QuickCheck को विधेय पास करते हैं, और यह बहुत सारे यादृच्छिक मान उत्पन्न करेगा (इस मामले की सूचियों में) और परीक्षण करें कि विधेय सभी परिणामों के लिए सही है। ऑनलाइन मैनुअल भी देखें ।

  • HUnit : हास्केल में यूनिट परीक्षण।

  • gtk2hs : हास्केल के लिए सबसे लोकप्रिय गिनी ढांचा, आपको हास्केल में gtk एप्लिकेशन लिखने की सुविधा देता है।

  • हैप्पीस्टैक : हास्केल के लिए एक वेब डेवलपमेंट फ्रेमवर्क। डेटाबेस का उपयोग नहीं करता है, बजाय एक डेटा प्रकार की दुकान। बहुत अच्छे डॉक्स (अन्य लोकप्रिय ढांचे स्नैप और यसोद होंगे )।

साथ ही, कई अवधारणाएं (जैसे मोनाड अवधारणा) हैं जिन्हें आपको अंततः सीखना चाहिए। यह पहली बार मोनाड्स सीखने से ज्यादा आसान होगा, क्योंकि आपके मस्तिष्क का उपयोग गर्भपात के स्तर से निपटने के लिए किया जाएगा। इन उच्च स्तरीय अवधारणाओं के बारे में सीखने के लिए एक बहुत अच्छा अवलोकन और वे एक साथ कैसे फिट होते हैं, यह टिपेकैपोपिडिया है

  • आवेदन: मोनाड्स की तरह एक इंटरफ़ेस, लेकिन कम शक्तिशाली। प्रत्येक मोनाड एपेक्टिव है, लेकिन इसके विपरीत नहीं। यह उपयोगी है क्योंकि कुछ प्रकार हैं जो लागू होते हैं लेकिन मोनाड नहीं होते हैं। इसके अलावा, आवेदक कार्यों का उपयोग करते हुए लिखा गया कोड अक्सर मोनाड कार्यों का उपयोग करते हुए समकक्ष कोड लिखने की तुलना में अधिक योग्य होता है। फ़नवेक्टर, एपेक्टिव फ़ंक्शंस और मोनॉयड देखें कि आप एक हेकेल गाइड सीखते हैं।

  • तह , traversable : Typeclasses कि सूचियों के संचालन के सार कई, ताकि एक ही काम करता है अन्य कंटेनर प्रकार के लिए लागू किया जा सकता है। हैस्केल विकी स्पष्टीकरण भी देखें ।

  • Monoid : एक Monoid एक ऐसा प्रकार है जिसमें एक शून्य (या यादगार) मान होता है, और एक ऑपरेशन होता है, <>जो कि दो Monoids को एक साथ जोड़ता है, जैसे कि x <> mempty = mempty <> x = xऔर x <> (y <> z) = (x <> y) <> z। इन्हें पहचान और सहकारिता कानून कहा जाता है। कई प्रकार के मोनॉयड हैं, जैसे कि संख्या, साथ mempty = 0और <> = +। यह कई स्थितियों में उपयोगी है।

  • तीर : तीर एक अभिकलन का प्रतिनिधित्व करने का एक तरीका है जो एक इनपुट लेता है और एक आउटपुट लौटाता है। एक फ़ंक्शन सबसे बुनियादी प्रकार का तीर है, लेकिन कई अन्य प्रकार हैं। पुस्तकालय में तीरों के हेरफेर के लिए कई बहुत उपयोगी कार्य हैं - वे बहुत उपयोगी हैं, भले ही वे सादे पुराने हास्केल कार्यों के साथ उपयोग किए जाते हों।

  • Arrays : हास्केल में विभिन्न उत्परिवर्तनीय / अपरिवर्तनीय सरणियाँ।

  • ST मोनाड : आपको एक उत्परिवर्तित अवस्था वाला कोड लिखने देता है जो बहुत जल्दी चलता है, जबकि मोनाड के बाहर शुद्ध रहता है। अधिक जानकारी के लिए लिंक देखें।

  • FRP: फंक्शनल रिएक्टिव प्रोग्रामिंग, कोड लिखने का एक नया, प्रायोगिक तरीका जो इवेंट्स, ट्रिगर्स, इनपुट्स और आउटपुट (जैसे कि एक gui) को हैंडल करता है। मैं हालांकि इस बारे में ज्यादा नहीं जानता। यम के बारे में पॉल हुडक की चर्चा एक अच्छी शुरुआत है।

कई नई भाषा सुविधाएँ हैं जिन पर आपको एक नज़र डालनी चाहिए। मैं बस उन्हें सूचीबद्ध करूंगा, आप उनके बारे में बहुत सारी जानकारी Google से प्राप्त कर सकते हैं, haskell wikibook , haskellwiki.org साइट और gh प्रलेखन

  • मल्टीपरमीटर प्रकार की कक्षाएं / कार्यात्मक निर्भरताएं
  • परिवारों को टाइप करें
  • लगातार मात्रा निर्धारित प्रकार
  • प्रेत प्रकार
  • GADTS
  • अन्य...

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

अंत में आप विभिन्न हास्केल टूल्स के बारे में अधिक जानना चाहते हैं। इसमें शामिल है:

  • ghc (और इसकी सभी विशेषताएँ)
  • केबल : हास्केल पैकेज सिस्टम
  • डार्क्स : हास्केल में लिखा एक वितरित संस्करण नियंत्रण प्रणाली, हास्केल कार्यक्रमों के लिए बहुत लोकप्रिय है।
  • हैडॉक : एक हास्केल स्वचालित प्रलेखन जनरेटर

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

विशेषज्ञ

इस चरण में जाने के लिए आपको वर्ष लगेंगे (2009 से हैलो!), लेकिन यहां से मैं अनुमान लगा रहा हूं कि आप पीएचडी के पेपर, नए ghc एक्सटेंशन लिखना और नए अमूर्त के साथ आना शुरू कर देंगे।

सहायता ले रहा है

अंत में, सीखने के किसी भी स्तर पर, जानकारी प्राप्त करने के लिए कई स्थान हैं। य़े हैं:

  • #haskell irc चैनल
  • मेलिंग सूची । ये केवल चर्चाओं को पढ़ने के लिए साइन अप करने के लायक हैं - कुछ बहुत दिलचस्प हैं।
  • अन्य स्थान haskell.org होम पेज पर सूचीबद्ध हैं

निष्कर्ष

खैर यह मेरी अपेक्षा से अधिक लंबा निकला ... वैसे भी, मुझे लगता है कि हास्केल में पारंगत होना बहुत अच्छा विचार है। इसमें लंबा समय लगता है, लेकिन यह मुख्य रूप से है क्योंकि आप ऐसा करके एक पूरी तरह से नया तरीका सीख रहे हैं। यह जावा सीखने के बाद रूबी सीखने जैसा नहीं है, लेकिन सी। सीखने के बाद जावा सीखना पसंद है। इसके अलावा, मुझे पता चल रहा है कि हास्केल सीखने के परिणामस्वरूप मेरे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कौशल में सुधार हुआ है, क्योंकि मैं अमूर्त विचारों के कई नए तरीके देख रहा हूं।


35
याय बाण! पहले आप अपने दिमाग को आकार देते हैं, फिर आप अपने सिर के बल खड़े होते हैं और कोमोनैड्स के बारे में सोचते हैं, और फिर आप दोनों तीर चलाने के लिए एक ही समय में करते हैं :) हस्केल में बहुत अधिक अभिव्यंजक शक्ति होती है जिसे टाइप-लेवल के साथ खोला जा सकता है। प्रोग्रामिंग, भी।
१२:१hem बजे

13
@nanothief Monadअधिक शक्तिशाली है, लेकिन यह भी कम संरचना है ... बहुत से लोग भिक्षुओं का उपयोग करते हैं जहां वे क्लीनर Applicativeकोड के साथ दूर हो सकते हैं । अधिकांश चीजें जो Functorएस हैं Monad, वे भी एस हैं, लेकिन आप का उपयोग करने के आसपास नहीं जाते हैं >>=और returnजब fmapपर्याप्त होगा, क्योंकि उत्तरार्द्ध बहुत सरल कोड की ओर जाता है यदि आप इसका उपयोग कर सकते हैं।
टॉम क्रॉकेट

8
@pelotom, मैंने टाइपसेक्लेसोपेडिया लिंक जोड़ा है और साथ ही उस सेक्शन पर एप्लिकेशंस का उपयोग करने के लिए एक बेहतर कारण है, और फ़ंक्टर सेक्शन को हटा दिया है। अधिकांश शिक्षण सामग्री (आरडब्ल्यूएच सहित) में मोनाड्स पर जोर देने के बाद से सही क्रम में मोनाड और एपेक्टिव अवधारणाएं प्राप्त करना कठिन है। दूसरी ओर, आपको एक हेकल ट्यूटोरियल सिखाना एक लंबा सफर तय कर चुका है क्योंकि मैंने शुरू में उत्तर लिखा था (लगभग 2 साल: ओ), और मोनाड से पहले लागू करना सिखाता है, शायद अब हैशेल सीखने का अनुशंसित तरीका होना चाहिए।
डेविड मियानी

2
अच्छी सलाह। मैंने इसे एक साल पहले शुरू किया था, और इंटरमीडिएट चरण के माध्यम से सबसे अधिक हूं। प्रतिक्रिया: आरडब्ल्यूएच के मोनाड अध्याय (अध्याय 14) को खराब तरीके से समझाया गया है। आरडब्ल्यूएच के ऑनलाइन संस्करण को पढ़ना फायदेमंद है, क्योंकि इसमें भीड़ वाली टिप्पणियां शामिल हैं जो अध्याय की सहायता करती हैं। एफडब्ल्यूआईडब्ल्यू , आप इन्वेंटेड मोनाड्स हो सकते हैं , मेरे लिए सबसे अच्छा काम करने वाला मोनाड ट्यूटोरियल था।
टॉम

6
@tomf: धन्यवाद! मैं हमेशा आश्चर्यचकित रहा हूं कि इस उत्तर ने कितना अच्छा काम किया है - मुझे लिखे हुए लगभग पांच साल हो गए हैं लेकिन यह अभी भी मजबूत हो रहा है। मुझे इसे जल्द ही अपडेट करने की आवश्यकता होगी, क्योंकि यह थोड़ा पुराना है। इसमें लेंस, पाइप, बाधा प्रकार, हैस्केल प्लेटफ़ॉर्म, टाइप स्तर संख्याओं का उल्लेख नहीं किया गया है और यह लिखे जाने के बाद से वे बहुत बड़े नए विषय हैं। आप सही हैं कि आरडब्ल्यूएच अब उतना अच्छा नहीं है, यह लंबे समय में अपडेट नहीं किया गया है और बहुत सारे उदाहरण संकलन नहीं कर रहे हैं। मुझे खुशी है कि यह वैसे भी आपके लिए उपयोगी था।
डेविड मियां

179

मेरे कुछ सहकर्मी को लर्निंग यू विद अ हास्केल फॉर ग्रेट गुड का अच्छा अनुभव था !

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

और यहाँ भी उत्तर की जाँच करें


27
मैं इसे अपनी सहमति देता हूँ। इसके अलावा, चूंकि यह स्पष्ट नहीं है, यहां ट्यूटोरियल के डाउनलोड करने योग्य पीडीएफ संस्करण का लिंक दिया गया है: learnyouaskell.com/learnyouahaskell.pdf वेबसाइड महान है, लेकिन मुझे मेट्रो के लिए एक प्रति भी पसंद है।
टेलीमेकस

8
मैंने इसकी शुरुआत की, लेकिन मेरी राय है कि आपको सीधे रियल वर्ल्ड हास्केल जाना चाहिए। अंतर कश्मीर और आर से सीखने की तरह है या "डमीज़ के लिए सी" जो सरल होने की कोशिश करता है, लेकिन अपने दृष्टिकोण के साथ महत्वपूर्ण सामान को याद करता है। मुझे लगता है कि हास्केल "अनिवार्य तरीका" सीखने की कोशिश करने के बजाय सीधे तथ्यों को प्राप्त करना बेहतर है।
जॉन स्मिथ

7
मैं इसे पूरी तरह से प्यार करता हूं, और मैंने इस और रियल वर्ल्ड हास्केल में बहुत समय लगाया है। IMO, "लर्न यू हस्कल" रियल वर्ल्ड हास्केल की तुलना में गहरी अंतर्दृष्टि देता है, हालांकि वे दोनों महान संसाधन हैं।
चार्ली फ्लावर्स

7
@ abababa22 मुझे लगता है कि LYAH को पहले पढ़ना और फिर RWH में जाना सबसे अच्छा विचार है। LYAH आपको सिर्फ हास्केल नहीं सिखाता है; यह आपको कार्यात्मक प्रोग्रामिंग सिखाता है। आप समस्याओं को हल करते समय कार्यात्मक तरीके से सोचना शुरू करते हैं। जाहिर है, केवल LYAH एक बड़ा आवेदन लिखने के लिए पर्याप्त नहीं होगा, लेकिन यह आपके दिमाग को सही तरीके से झुकाता है। यदि आप अनिवार्य पृष्ठभूमि से हैं, तो यह सबसे अच्छा तरीका है, IMO
अब्दुलात्सर मोहम्मद

4
@Telemachus बस ध्यान दें: पीडीएफ अंतिम संस्करण नहीं है, कम से कम यह आखिरी अध्याय याद कर रहा है।
sdcvvc

103

यहां एक अच्छी पुस्तक है जिसे आप ऑनलाइन पढ़ सकते हैं: रियल वर्ल्ड हास्केल

मैंने जो भी हास्केल कार्यक्रम किए हैं उनमें से अधिकांश प्रोजेक्ट यूलर समस्याओं को हल करने के लिए किया गया है।

एक बार सलाह के टुकड़े को मैंने बहुत पहले नहीं पढ़ा था कि आपके पास सरल समस्याओं का एक मानक सेट होना चाहिए जो आप जानते हैं कि कैसे (सिद्धांत रूप में) हल करना है और फिर जब भी आप एक नई भाषा सीखने की कोशिश करते हैं तो आप उस भाषा में उन समस्याओं को लागू करते हैं।


2
मेरे अनुभव में रियल वर्ल्ड हास्केल महान है, जब तक आप अध्याय 5 तक नहीं पहुंच जाते। तब से मैं इसकी सिफारिश नहीं करूंगा।
MasterMastic

क्यों @MasterMastic? अध्याय 5 से आगे क्या समस्या है? पैसे खर्च करने से पहले मैं जानना चाहूंगा।
Jay Blanchard

@JayBlanchard अध्याय 5 में आपको एक पुस्तकालय का एक ठोस उदाहरण मिलना शुरू होता है, जो अच्छा है, लेकिन वे आपको बताते हैं कि वे क्या करने जा रहे हैं, इसे करें, लेकिन वे यह नहीं समझाते हैं कि पूरी तरह से, और स्पष्ट रूप से क्यों नहीं, और वहाँ जादू हेक्स शाब्दिक का थोड़ा सा। तुम सिर्फ गतियों से गुजर रहे हो। यह मेरे लिए सबसे बड़ा मुद्दा नहीं था, सबसे बड़ा मुद्दा यह था कि पुस्तक काफी हद तक इस तरह के कठिन और लंबे उदाहरणों पर निर्भर करती है (लंबे समय तक एक पूरे अध्याय से अधिक लेने के लिए)। आप शायद ही उन हिस्सों को पढ़ सकते हैं जिन्हें आप चाहते हैं। मुझे लगता है कि महान लेखक, अद्भुत ज्ञान लेकिन बेहद खराब निष्पादन।
मास्टरमैस्ट

73

मैंने हास्केल का उपयोग करके कार्यात्मक प्रोग्रामिंग पर इस 13 एपिसोड श्रृंखला को देखने का आनंद लिया।

C9 लेक्चर: डॉ। एरिक मेजर - फंक्शनल प्रोग्रामिंग फंडामेंटल: http://channel9.msdn.com/shows/Going+Deep/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1/


69

दूसरों के उत्तरों को जोड़ने के लिए - एक उपयोगी है जो कोडिंग करते समय आपकी मदद करेगा (उदाहरण के लिए प्रोजेक्ट यूलर समस्याओं को हल करते समय): हुगली । आप कमांड लाइन इंटरफेस या वेब इंटरफेस का उपयोग कर सकते हैं ।

कमांड लाइन

स्थापित करने के बाद हास्केल प्लेटफ़ॉर्म सुनिश्चित करें cabal install hoogle

Hoogle उपयोग उदाहरण:

आपके पास एक फ़ंक्शन है f x = 3 * x + 1और आप इसे लागू करना चाहते हैं (5 :: Int), फिर इसे परिणाम और उस परिणाम और इतने पर लागू करें और उन मूल्यों की एक अनंत सूची प्राप्त करें। आपको संदेह है कि आपकी सहायता के लिए पहले से ही एक फ़ंक्शन मौजूद हो सकता है (विशेष रूप से आपके लिए नहीं f)।

यह फ़ंक्शन प्रकार का होगा (a -> a) -> a -> [a]यदि यह लेता है f 5या a -> (a -> a) -> [a]यदि यह लेता है 5 f(हम मान लेते हैं कि फ़ंक्शन सामान्य प्रकारों के लिए है न कि सिर्फ Ints)

$ hoogle "a -> (a -> a) -> [a]"
Prelude iterate :: (a -> a) -> a -> [a]

हां, जिस फ़ंक्शन की आपको आवश्यकता है वह पहले से मौजूद है और इसे कहा जाता है iterate। आप इसका उपयोग करते हैं iterate func 5!

वेब इंटरफेस

उसी उदाहरण के लिए परिणाम यहां पाया जा सकता है


आपको जो कुछ भी चाहिए उसे समझने के लिए मानक लाइब्रेरी फ़ंक्शंस को खोजना इतना आसान हो जाता है कि आपको ज़रूरत पड़ने पर Hoogle से कैसे पूछें।
आख-मोपर्क

57

हास्केल में ग्राहम हटन के प्रोग्रामिंग संक्षिप्त, यथोचित रूप से पूरी तरह से है, और हास्केल को पढ़ाने के उनके वर्षों वास्तव में दिखाते हैं। यह लगभग हमेशा है कि मैं लोगों के साथ शुरू करने की सलाह देता हूं, भले ही आप वहां से जाएं।

विशेष रूप से, अध्याय 8 ("फंक्शनल पार्सर्स") आपको असली ग्राउंडवर्क प्रदान करता है जिसे आपको मोनाड्स के साथ शुरू करने की आवश्यकता होती है, और मुझे लगता है कि अब तक शुरू करने के लिए सबसे अच्छी जगह है, इसके बाद ऑल अबाउट मोनाड्स । (उस अध्याय के संबंध में, हालांकि, वेब साइट से इरेटा पर ध्यान दें, हालांकि: आप doकुछ विशेष सहायता के बिना फॉर्म का उपयोग नहीं कर सकते । आप पहले टाइपकास्ट के बारे में जानना चाहते हैं और उस समस्या को स्वयं हल कर सकते हैं।)

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


5
यह एक पूरी तरह से अंडर-सराहना पुस्तक (और उत्तर) है। कार्यात्मक पार्सर्स पर अध्याय, इसके बाद IO पर एक अध्याय, जिसमें से न तो भी मोनड्स का उल्लेख है, वास्तव में एक सुरुचिपूर्ण शैक्षणिक दृष्टिकोण के रूप में चमकता है।
मचिअकिग


31

मैं #haskell irc चैनल से जुड़ने और वहां सवाल पूछने का सुझाव दूंगा । इसी तरह मैंने हास्केल सीखा। यदि आप ऊपर दिए गए सुझाव के अनुसार वास्तविक विश्व हास्केल से गुजरते हैं, तो आपके प्रश्नों के वास्तविक समय के उत्तर बहुत मदद करेंगे। #Haskell पर बहुत सारे स्मार्ट लोग हस्केल को मज़े और लाभ के लिए लिखते हैं, इसलिए आपको बहुत सारे अच्छे इनपुट मिलेंगे। कोशिश करो!


5
+1 - स्पष्ट होने के लिए: इसे केवल irc चैनल से सीखें । के रूप में, में नहीं जाते हैं और पूछते हैं "मैं एक हैस्केल प्रोग्राम कैसे लिखूं? मैं नंबर कैसे जोड़ूं?"
वैकल्पिक

Irc freenode के अलावा, हाल ही में Discord chats में haskell पर बढ़ती जीवंत चर्चा है।
टाइपेलोजिक


19

मैं एक परिचय के रूप में इसके अलावा एक और हास्केल ट्यूटोरियल की सिफारिश कर सकता हूं ।

एक और अच्छा शिक्षण संसाधन (संभवतया मध्यवर्ती स्तर पर), जिसने मुझे बहुत मदद की है और अन्य उत्तरों में जहां तक ​​मैं देख सकता हूं, उसका उल्लेख नहीं किया गया है, ब्रेंट यॉर्गी का टाइपक्लोपेडिया है , जो द मोनाड रीडर (अंक में पाया जा सकता है) 13)

यह बहुत ही सुलभ शैली में लिखा गया है और इसमें (कई अन्य बातों के अलावा), निम्नलिखित परिचयात्मक सलाह है:

एक विशेषज्ञ हास्केल हैकर के ज्ञान की दो कुंजी हैं:

  1. प्रकारों को समझें।

  2. प्रत्येक प्रकार के वर्ग के लिए एक गहरी अंतर्ज्ञान प्राप्त करें और अन्य प्रकार की कक्षाओं के लिए इसका संबंध, कई उदाहरणों के साथ परिचित द्वारा समर्थित।

मोनाद रीडर स्वयं कार्यात्मक प्रोग्रामर (हास्केल प्रोग्रामर्स ही नहीं) के लिए एक पूर्ण खजाना है।


14

इसमें आसान प्रोग्राम लिखने की कोशिश करें।

आप विभिन्न पाठ्यपुस्तकों में नमूना कार्य पा सकते हैं, शायद।

मैं हास्केल / एफपी पाठ्यपुस्तकों से चिपके रहने की सलाह नहीं दूंगा, बस इसके साथ सरल चीजें करने की कोशिश करें: गणना, स्ट्रिंग जोड़तोड़, फ़ाइल का उपयोग।

एक दर्जन हल करने के बाद, मैंने बर्फ को तोड़ दिया है :)

उसके बाद, उन्नत अवधारणाओं (मोनैड्स, एरो, आईओ, पुनरावर्ती डेटा संरचनाओं) पर बहुत कुछ पढ़ें, क्योंकि हैसेल अनंत है और उनमें से बहुत सारे हैं।


14

मुझे लगता है कि उदाहरणों द्वारा हास्केल की विशेषता को महसूस करना सबसे ऊपर शुरू करने का सबसे अच्छा तरीका है।

http://en.wikipedia.org/wiki/Haskell_98_features

यहां पर ट्रंक टाइपकान्ड्स हैं जिनमें मोनाड और तीर शामिल हैं

http://www.haskell.org/haskellwiki/Typeclassopedia

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

एक एकीकृत प्रणाली अपना समय बचा सकती है: http://hackage.haskell.org/platform/

इस प्रणाली के लिए पैकेज डेटाबेस: http://hackage.haskell.org/

जीएचसी कंपाइलर की विकी: http://www.haskell.org/haskellwiki/GHC

Haskell_98_features और Typeclassopedia के बाद, मुझे लगता है कि आप पहले से ही उनके बारे में दस्तावेज़ीकरण पा सकते हैं और पढ़ सकते हैं

वैसे, आप कुछ जीएचसी के भाषाओं के विस्तार का परीक्षण करना चाह सकते हैं जो भविष्य में हैस्केल मानक का एक हिस्सा हो सकता है।

यह हैस्केल सीखने का मेरा सबसे अच्छा तरीका है। उम्मीद है यह आपकी मदद कर सकता है।


13

मेरा सुझाव है कि आप सबसे पहले BONUS के ट्यूटोरियल को पढ़ना शुरू करें , और उसके बाद रियल वर्ल्ड हास्केल (ऑनलाइन मुफ़्त में) पढ़ें । Irc.freenode.com पर #Haskell IRC चैनल से जुड़ें , और प्रश्न पूछें। ये लोग बिल्कुल नौसिखिया मित्र हैं, और समय के साथ मेरी बहुत मदद की है। इसके अलावा, एसओ पर यहीं उन चीजों के साथ मदद पाने के लिए एक शानदार जगह है जिसे आप समझ नहीं सकते हैं! कोशिश करें कि हतोत्साहित न हों, एक बार क्लिक करने पर, आपका मन उड़ जाएगा।

बोनस 'ट्यूटोरियल आपको प्राइम करेगा, और आपको रोमांच की सवारी के लिए तैयार कर देगा जो रियल वर्ल्ड हास्केल लाता है। मेरी तुम्हें शुभकामनाएँ!


12

यदि आपके पास केवल अनुभवजन्य / ओओ भाषाओं के साथ अनुभव है, तो मैं एक कदम पत्थर के रूप में अधिक पारंपरिक कार्यात्मक भाषा का उपयोग करने का सुझाव देता हूं। हास्केल वास्तव में अलग है और आपको कहीं भी प्राप्त करने के लिए विभिन्न अवधारणाओं को समझना होगा। मैं पहले एक एमएल-शैली की भाषा (जैसे एफ एफ #) से निपटने का सुझाव देता हूं।


एल्म इन विकल्पों में सबसे नज़दीकी, अधिक उपयोगी और शुरुआती-अनुकूल हो सकता है ...
पेड्रो रोलो

1
मैं F # जैसे अस्थायी मार्ग से गुजरने पर असहमत हूं। मेरे लिए, यह एक वोदका पीने जैसा है जिसे आपको जल्दी से पीना है। उस तरह से अधिक दर्दनाक, लेकिन खुशी भी है। अस्थायी मार्ग, केवल मेरे लिए और अधिक भ्रम पैदा करते हैं।
टाइपेलोगिक

10

पहला उत्तर बहुत अच्छा है। एक्सपर्ट लेवल पर आने के लिए आपको कुछ एक्सपर्ट्स के साथ पीएचडी खुद करनी चाहिए।

मेरा सुझाव है कि आप हास्केल पृष्ठ पर जाएँ: http://haskell.org । वहां आपके पास बहुत सारी सामग्री है, और हास्केल समुदाय द्वारा अनुमोदित हास्केल में सबसे अद्यतित सामान के लिए बहुत सारे संदर्भ हैं।


2
क्षमा करें, लेकिन यहां पीएचडी तर्क का उपयोग करना यह कहने जैसा है कि आपके पास अच्छा शेफ बनने के लिए 300 डॉलर का रसोई का चाकू होना चाहिए। यहां तक ​​कि साइमन पेटन जोन्स - हास्केल के पिता - के पास पीएचडी नहीं है। अभ्यास और दृढ़ता वह है जो यहां और किसी भी अन्य क्षेत्र में विशेषज्ञता की ओर जाता है।
पेट्रस प्यूरील्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.