हास्केल और लिस्प बनाम हास्केल या लिस्प [बंद]


40

मैं वर्तमान में C, C ++ और पायथन के साथ कोड करता हूं। मैं एक कार्यात्मक प्रोग्रामिंग भाषा चुनना चाहता हूं, और अभी मैं हास्केल की ओर झुक रहा हूं। मैं यहां "हास्केल बनाम लिस्प" युद्ध शुरू नहीं करना चाहता; जो मैं जानना चाहता हूं वह यह है: यदि मैं मुख्य रूप से कार्यात्मक प्रोग्रामिंग के संपर्क के लिए हास्केल सीखता हूं, तो क्या लाभ, यदि कोई हो, तो मुझे बाद में सीखने से लाभ होगा?


1
और एफ # और क्लोजर।
CND

जवाबों:


58

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

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

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


6
मुझे लगता है कि आपने इसे पकड़ लिया है - हास्केल और स्मॉलटाक को सीखने के लिए जो उपयोगी है वह उनकी शुद्धता है।
फ्रैंक शीयर

4
मैं इस बात से सहमत हूं कि शुद्धता से भाषा सीखना बहुत आसान हो जाता है। मैं LISP के साथ स्वयं कार्यात्मक भाषा नहीं समझ सका क्योंकि भाषा में सब कुछ संभव है और मेरे पास बहुत अधिक अनिवार्य, OO पृष्ठभूमि है। लेकिन हास्केल में, ऐसी कोई अवधारणा नहीं है जो सीखने को बाधित करती है।
Eonil

1
यह मजेदार है, मुझे इसका विपरीत अनुभव हुआ। मैंने योजना के माध्यम से कार्यात्मक प्रोग्रामिंग के मुख्य बिंदुओं को उठाया, मेरी पहली भाषा। मैं कभी-कभी हास्केल में हैक करता हूं और मुझे अनिवार्य रूप से पता चलता है कि मुझे उस सामान का 90% + पुनः प्राप्त करना है जो मुझे पता था कि जब भी मैं हास्केल को थोड़ी देर के लिए छोड़ता हूं। यह कहा जा रहा है, हास्केल एक अविश्वसनीय रूप से समृद्ध भाषा है, जिसमें आपको पढ़ाने के लिए बहुत बड़ी राशि है। प्रकारों का पालन करें!
जोश Infiesto

31

और कृपया।

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

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

लिस्प अभी भी आपको सिखाने के लिए बहुत होगा:

  • यह मल्टीपरेडिग्म है, इसलिए dsimcha के रूप में यह बताता है कि यह आपको दिखाएगा कि अन्य प्रतिमानों के साथ FP कैसे एकीकृत किया जाए।
  • लिस्प आपको सिखाएगा कि "कोड-इस-डेटा, डेटा-इस-कोड", उदाहरण के लिए इसके मैक्रोज़ के माध्यम से।
  • CLOS OO का एक बहुत ही दिलचस्प ब्रांड है, जिसमें कई तरह के वंशानुक्रम होते हैं, जो सामान्य कार्य करता है।

11

लिस्प सीखना बाद में आपको Emacs को अनुकूलित करने की अनुमति देगा जो यकीनन सबसे उन्नत पाठ संपादक उपलब्ध है। आप हास्केल में ऐसा नहीं कर सकते।



6
हो सकता है कि कोई व्यक्ति इसके लिए एक पाठ संपादक लिख सकता है। मैंने सुना है Emacs ऑपरेटिंग सिस्टम एक के साथ नहीं आता है। (मैं बच्चा। मुझे पता है कि आप वाइपर मोड प्राप्त कर सकते हैं। :)
ग्रेफेड

14
दरअसल, यी नाम का एक Emacs-clone है, जो Haskell का ठीक उसी तरह से इस्तेमाल करता है, जिस तरह Emacs लिस्प का इस्तेमाल करता है। वास्तव में, (GNU) Emacs की तुलना में, Yi और भी शुद्ध है, क्योंकि इसकी कर्नेल भी हास्केल में लिखी गई है, जबकि Emacs की गुठली आमतौर पर लिस्प में नहीं लिखी जाती है। GNU Emacs का कर्नेल C में लिखा गया है, JEmacs 'जावा में लिखा गया है, उदाहरण के लिए।
जोर्ज डब्ल्यू मित्तग

2
@ Jörg, अगर यह GNU Emacs या XEmacs के पूर्ण क्लोन के बजाय एक आंशिक पुन: कार्यान्वयन है, तो यह एक ही बात नहीं है। वर्ड को वर्डपैड या नोटपैड से तुलना करने के समान।

1
@ Thorbjorn Ravn एंडरसन: हाँ, पर काफी नहीं है कि बुरा नहीं है। :)
ग्रेफेड

11

हास्केल और लिस्प दो बिल्कुल अलग जानवर हैं।

हास्केल किफ़ोर है "हाथीदांत टॉवर में शुद्ध कार्यात्मक प्रोग्रामिंग"

लिस्प दयालु है "कोड-इस-डेटा / डेटा-इस-कोड / अपनी भाषा का निर्माण करें"। आप अपने कोड में हेरफेर कर सकते हैं जिस तरह से आप कल्पना कर सकते हैं।

वे बहुत अलग हैं। दोनों "कार्यात्मक प्रोग्रामिंग" पहलू साझा करते हैं, लेकिन यह वास्तव में उनके मतभेदों की तुलना में एक छोटा सा सामान्य बिंदु है। बस उन्हें बाहर की कोशिश करो और आप देखेंगे कि वे कितने अलग हैं!


+1: अच्छी बात है। मैं कुछ हास्केल और कुछ लिस्प को जानता हूं। भले ही मैं उनमें से कोई भी विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि आप सही हैं कि वे बहुत अलग हैं। हास्केल में आपको कोड के रूप में डेटा का उपयोग करने का विचार नहीं है। लिस्प में आपके पास (AFAIK) पैटर्न मैचिंग नहीं है। संभवतः मतभेदों की सूची (!) लंबी है।
जियोर्जियो

7

लिस्प सीखने से मुझे जो मुख्य लाभ दिखाई दे रहा है, वह यह है कि एफपी को वास्तविक विश्व उन्मुख बहुपद भाषा में एकीकृत करना सीखना है, न कि केवल एक अकादमिक भाषा के संदर्भ में इसे सीखना जो शुद्धता पर जोर देता है।


5
मुझे लगता है कि आप एक "हास्केल बनाम लिस्प" युद्ध चाहते हैं!
डॉन रॉबी

3
हास्केल है एक शैक्षिक भाषा कि पवित्रता पर जोर देती है ... और बहुत से लोग वास्तविक दुनिया में इसका इस्तेमाल करते हैं। उस शिविर में भी स्मालटाक।
फ्रैंक शीयर

बहुत से लोग असली दुनिया में हास्केल का उपयोग करते हैं?
जॉन हैरोप

1
@ जॉन हैरोप: ठीक है, मैं वास्तविक दुनिया में हास्केल का उपयोग करता हूं (और यह कुछ अनुप्रयोगों के लिए वास्तव में ठीक काम करता है), शायद मैं कुछ में से एक हूं? (?)
जियोर्जियो

5

मैं C / C ++ / Python बैकग्राउंड से भी आता हूँ और पिछले कुछ वर्षों में FP को एक-दो बार आज़मा चुका हूँ। शुरू में मैंने हास्केल को देखा और उसका सिर या पूंछ नहीं बना सका, फिर ओक्लेमल की कोशिश की लेकिन उसके साथ बहुत आगे नहीं बढ़ पाया। अंत में मैंने स्काला के बारे में अच्छी बातें सुननी शुरू कर दीं, इसे आजमाया, और यह मुझे बहुत अच्छी तरह से अनुकूल लगी (मैंने अतीत में जावा का एक सा भी काम किया था), इस बात के लिए कि स्काला में एक साल में डबिंग के बाद (और 161 भेज दिया इसके साथ प्रोजेक्ट यूलर समस्याएं), हास्केल बहुत अधिक समझ में आता है। वास्तव में मैंने बस हास्केल पर कुछ पुस्तकों का आदेश दिया है और इसे एक और हवा देना चाहता हूं, हालांकि यह काफी हद तक स्कलाज़ के अस्तित्व से प्रेरित है।

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


दिलचस्प है कि आप OCaml की तुलना में स्काला के साथ आगे बढ़ गए। ऐसा कैसे?
जॉन हैरोप

@ जॉन: अच्छा सवाल; बताना कठिन है। शायद मैं उस समय "कार्यात्मक" होने के लिए तैयार नहीं था। हो सकता है कि मैं सिर्फ सही स्तर पर एक स्केल ट्यूटोरियल को खोजने के लिए हुआ था। हो सकता है कि स्काला के C / C ++ / Java वंशावली ने इसे थोड़ा कम विदेशी बना दिया हो। इन दिनों किसी भी तरह के तर्कसंगत दांव को देखते हुए स्केला के बजाय F # पर होगा, मैं शायद कुछ समय में OCaml डोमेन को फिर से दिखाऊंगा, हालाँकि जब से मैं इस सामान को अपने C ++ के लिए एक अलग "प्रोग्रामिंग मानसिकता" में लाने के लिए खुशी से झुलस रहा हूं। डेजॉब, मेरे पास अगले हास्केल को फिर से लेने के लिए एक विकृत झुकाव है।
तैमूर डेस

चिकनी चलती दृष्टिकोण :)
Eonil

2

मैं मूल रूप से C / C ++ / Ruby बैकग्राउंड से आया था और जब भी मैं रूबी में FP अवधारणाओं का उपयोग करता था। राज्य सिर्फ थोड़े ने मेरे मस्तिष्क को चोट पहुंचाई। मेरे एक दोस्त ने मुझे एक दिन फोन किया, और उसने मुझे हास्केल में कुछ लिखने के लिए कहा (मेरा पहला - और उम्मीद है कि आखिरी नहीं - हास्केल नौकरी!)। मैंने जल्दी से भाषा सीखी और मैंने एक साथ कुछ काम किया। यह सुंदर या कुछ भी नहीं था, लेकिन यह काम किया।

हास्केल से मैंने एक महीने का ब्रेक लिया क्योंकि मेरे पास इसका इस्तेमाल करने के लिए कुछ भी नहीं था। लेकिन जब मैंने फैसला किया कि मुझे अपना ब्लॉग सॉफ्टवेयर लिखने की आवश्यकता है, तो मैंने हास्केल ( https://symer.io ) का उपयोग किया । हास्केल वास्तव में अच्छा है क्योंकि आप भागों में एक समस्या को तोड़ सकते हैं और इन भागों को इनपुट के आधार पर अलग-अलग लागू कर सकते हैं। हास्केल भी मूल्यों की बुद्धिमान मुक्केबाजी के माध्यम से विफलता को बहुत अच्छी तरह से संभालता है। इन बक्सों के साथ काम करने के लिए बहुत सारे उपकरण हैं जो आप भूल जाते हैं कि वे मौजूद हैं।

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

C ++ मेमोरी प्रबंधन के बाहर हास्केल को एक मोमबत्ती पकड़ नहीं सकता है। हास्केल बस उतना ही तेज (यदि तेज नहीं है), काफी अधिक प्रवृत्त, और बहुत अधिक सुरक्षित है। लेकिन हास्केल की सुरक्षा के रास्ते में कभी नहीं आता है।

टीएल; टीआर हास्केल ताजी हवा की एक सांस है, और लिस्प थोड़ा अधिक कार्यात्मक रूबी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.