हैस्केल के बाद कौन - सी भाषा सीखी जाए? [बन्द है]


85

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

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

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

जवाबों को तौलना : ये सिर्फ नोट्स हैं, निश्चित रूप से। मैं सिर्फ उन सभी को जवाब देना चाहता हूं जिन्होंने अच्छी तरह से गठित प्रतिक्रियाएं दीं। आप बहुत मददगार रहे।

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

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

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

4) मुख्यधारा की भाषाओं में, पायथन सबसे दिलचस्प लगता है। टिम येट्स भाषाओं को बहुत आकर्षक लगते हैं। जाहिरा तौर पर, पायथन को अक्सर प्रथम वर्ष के सीएस की बड़ी कंपनियों को पढ़ाया जाता है; इसलिए यह या तो वैचारिक रूप से समृद्ध है या सीखना आसान है। मुझे और अधिक शोध करना होगा।

आपकी सिफारिशों के लिए धन्यवाद! यह एक लिस्प (स्कीम, क्लोजर), प्रोलॉग या कोक या एजडा जैसे प्रूफ असिस्टेंट की तरह दिखता है, मुख्य लैंगॉज की सिफारिश की जा रही है।


34
किसी भी भाषा को गहराई से सीखने के लिए 2.5 महीने का समय पर्याप्त नहीं है, अपने बुलबुले को फोड़ने के लिए क्षमा करें।
Woot4Moo

20
यह निश्चित रूप से सच है। मेरा मतलब यह नहीं था कि मैं "हास्केल" सीख गया, जो भी इसका मतलब है। मेरा मतलब था कि मैं भाषा का उपयोग करने में सहज महसूस करता हूं। मैं स्पष्ट रूप से इसे सीखना बंद नहीं करूंगा।
डेनपोर्टिन

10
@ मिचेल: दक्षता के बजाय शुद्धता के लिए कोडिंग कुछ ऐसा है जिसे मैं और अधिक देखना पसंद करूंगा ...
डेनिज़ डोगन

24
@ Woot4Moo: एक भाषा के साथ "आरामदायक" होने के लिए 2.5 महीने का समय बहुत है, हालांकि। निस्संदेह अगर वह औपचारिक तर्क से परिचित है और अपनी दर्शन पृष्ठभूमि से अमूर्त अवधारणाओं के साथ काम कर रहा है। अन्य भाषाओं से अनजान आदतें न होने से भी इस मामले में मदद मिलेगी।
सीए मैक्कन

8
@gnovice: यह निश्चित रूप से बहुत बार पूछा गया है। लेकिन यह पहली बार है जब मैंने किसी ऐसे व्यक्ति को देखा है जिसने हास्केल के साथ अपना पहला गंभीर प्रोग्रामिंग अनुभव किया है। यह ऐसा है जैसे समय का तीर उलटा हो या कुछ और।
मुहम्मद अलकरौरी

जवाबों:


85

मैं प्रोग्रामिंग के अपने ज्ञान को व्यापक बनाना चाहूंगा। (...) मुझे लगा कि मैं इस सवाल का जवाब दूंगा, साथ ही मैं जिस प्रकार की भाषा की तलाश कर रहा हूं, उसके बारे में कई कयास लगाए जा रहे हैं। कुछ व्यक्तिपरक हैं, कुछ का उद्देश्य हास्केल से संक्रमण को कम करना है।

मजबूत प्रकार की प्रणाली। (...) यह मेरे कार्यक्रम की शुद्धता के बारे में अनौपचारिक रूप से तर्क भी करता है। मैं शुद्धता से चिंतित हूं, दक्षता से नहीं।

पुनरावृत्ति पर जोर के बजाय पुनरावृत्ति। (...)

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

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

  • अवहेलना के प्रकार, अधिक जादू जोड़ें : यदि हास्केल टोना है, तो लिस्प रचना का कच्चा, प्राचीन जादू है। लिस्प-परिवार की भाषाएं ( योजना और क्लोजर सहित ) में लगभग अतिसूक्ष्मवाद के साथ संयुक्त अद्वितीय लचीलापन है। भाषाओं में अनिवार्य रूप से कोई वाक्यविन्यास नहीं होता है, एक पेड़ डेटा संरचना के रूप में सीधे कोड लिखना; कुछ भाषाओं में गैर-मेटा प्रोग्रामिंग की तुलना में एक लिस्प में मेटाप्रोग्रामिंग आसान है।

  • थोड़ा सा समझौता करें और मुख्यधारा के करीब जाएं : हास्केल उन भाषाओं के व्यापक परिवार में आता है जो एमएल से काफी प्रभावित हैं, जिनमें से कोई भी आप बहुत अधिक कठिनाई के बिना स्थानांतरित कर सकते हैं । हास्केल सबसे सख्त में से एक है जब यह प्रकार और कार्यात्मक शैली के उपयोग की गारंटी की शुद्धता की बात आती है, जहां अन्य अक्सर हाइब्रिड शैली और / या विभिन्न कारणों से व्यावहारिक समझौता करते हैं। यदि आप OOP के लिए कुछ जोखिम चाहते हैं और मुख्यधारा प्रौद्योगिकी प्लेटफार्मों के बहुत से उपयोग करना चाहते हैं, तो या तो स्काला JVM या F # पर.NET पर जावा और .NET प्लेटफ़ॉर्म के साथ आसान अंतर प्रदान करते हुए हास्केल के साथ बहुत कुछ है। F # को Microsoft द्वारा सीधे समर्थन दिया जाता है, लेकिन हास्केल और गैर-विंडोज प्लेटफार्मों पर पोर्टेबिलिटी मुद्दों की तुलना में कुछ कष्टप्रद सीमाएं हैं। स्काला के पास हास्केल के अधिक प्रकार के सिस्टम और जावा के क्रॉस-प्लेटफ़ॉर्म क्षमता के लिए प्रत्यक्ष समकक्ष हैं, लेकिन अधिक भारी सिंटैक्स है और शक्तिशाली प्रथम-पक्ष समर्थन का अभाव है जो एफ # प्राप्त करता है।

उन सिफारिशों में से अधिकांश का उल्लेख अन्य उत्तरों में भी किया गया है, लेकिन उम्मीद है कि उनके लिए मेरा तर्क कुछ ज्ञान प्रदान करता है।


4
मैं Coq और Agda का परिवार हूं आप क्यूई II को भी देख सकते हैं ।
ह्यनेक-पीची- विचोडिल

आपकी राय में F # की कष्टप्रद सीमाएँ क्या होंगी? जैसा कि कोई अपने खाली समय में एफ # सीख रहा है, मैं जानने के लिए उत्सुक हूं।
लुकास

7
@ लुकास: बड़ी एक बनाम नंगे हड्डियों हास्केल उच्च-दयालु बहुरूपता और प्रकार वर्गों की कमी है। इसके अलावा, काफी कुछ जीएचसी-विशिष्ट एक्सटेंशन बहुत अच्छे हैं। यह किसी भी तरह से एक घातक दोष नहीं है, लेकिन हास्केल के लिए इस्तेमाल होने के बाद यह थोड़े अनाड़ी लगता है कि यह सामान नहीं है। कल्पना करें कि आधुनिक C # वापस C # 1.x का उपयोग करने से ...
CA McCann

@ हाईन: पहली नज़र में यह क्यूई 2 भाषा कोक या अडागा की तुलना में बहुत ही रोचक और अधिक लचीली लगती है। ऐसा लगता है कि लेखक ने इसे छोड़ने का फैसला किया है। क्या इस भाषा पर काम जारी रखने के लिए कोई आंदोलन है? मैं कुछ ऐसा सीखना चाहता हूं जो पहले से ही आधा मृत हो।
एलेक्स

@ एलेक्स: ऐसा लगता है कि यह शेन के रूप में जारी है: shenlanguage.org
amindfv

20

मैं वह आदमी बनने जा रहा हूं और सुझाव दूंगा कि आप गलत बात पूछ रहे हैं।

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

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

Clojure और अधिक हाल है और डिफ़ॉल्ट और आलसी मूल्यांकन की बहुत सारी द्वारा अचल स्थिति की तरह अधिक Haskellisms है, लेकिन यह जावा वर्चुअल मशीन है, जिसका अर्थ यह कुछ अजीब मौसा है पर आधारित है (उदाहरण के लिए JVM समर्थन नहीं पूंछ कॉल उन्मूलन, तो प्रत्यावर्तन प्रकार है करता है a हैक)।

रैकेट बहुत पुराना है, लेकिन रास्ते में बहुत सारी शक्ति को उठाया है, जैसे कि स्थिर प्रकार का समर्थन और कार्यात्मक प्रोग्रामिंग पर ध्यान केंद्रित करना। मुझे लगता है कि आप शायद रैकेट से सबसे बाहर निकलेंगे।

लिस्प्स में मैक्रो सिस्टम बहुत दिलचस्प और बहुत अधिक शक्तिशाली हैं जो आपको कहीं और दिखाई देगा। वह अकेला कम से कम देखने लायक है।


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

19

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

एक इंटरेक्टिव प्रमेय साबित करने वाली प्रणाली जैसे कि ट्वेल या कोक भी आपके फैंस को चौंका सकती है।


2
जैसा कि आप एक दृढ़ता से टाइप की गई भाषा में रुचि रखते हैं, मैं लैम्बडाप्रोलॉग, एक टाइप-उच्चतर लॉजिक प्रोग्रामिंग भाषा की सलाह दूंगा। एक संकलित कार्यान्वयन Teyjus है - code.google.com/p/teyjus (प्रकटीकरण: मैंने Teyjus पर काम किया)।
ज़ैक स्नो

18

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

एक अन्य लोकप्रिय भाषा हास्केल से प्रदान करता है और अधिक शक्ति है कि AGDA - मैं जानते हुए भी यह dependently लिखा गया, Hackage पर, और अच्छी तरह से लोगों को मैं सम्मान से सम्मानित परे AGDA पता नहीं है, लेकिन जो मेरे लिए काफी अच्छा कारण हैं।

मुझे उम्मीद नहीं होगी कि इनमें से कोई भी आसान होगा। लेकिन यदि आप हास्केल को जानते हैं और एक ऐसी भाषा को आगे बढ़ाना चाहते हैं जो हास्केल प्रकार प्रणाली से अधिक शक्ति देती है तो उन्हें माना जाना चाहिए।


1
हास्केल से अगड़ा प्राकृतिक "अगला कदम" की तरह आवाज करता है।
डेनिज़ डोगन

5
यह भी ध्यान देने योग्य है कि अगर, एक दर्शन प्रमुख के रूप में, उनके पास औपचारिक तर्क के साथ बहुत अनुभव है, तो करी-हावर्ड-शैली के प्रूफ असिस्टेंट उनके लिए बहुत ही कम चौंकाने वाले हो सकते हैं, क्योंकि वे सबसे अनुभवी प्रोग्रामर होंगे!
सीए मैक्कैन

11

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

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

विशेष रूप से लिस्प्स (सीएल जितना स्कीम नहीं) और प्रोलॉग (और हास्केल) पुनरावृत्ति को गले लगाते हैं।

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

इसलिए, ऐसा लग सकता है कि अगर मैंने कुछ भाषाओं को आज़माने के लिए आपके पास समय नहीं होने के बारे में भाग को नज़रअंदाज़ कर दिया, तो मुझे लगता है कि इनमें से किसी के साथ बिताया गया समय बर्बाद नहीं होगा, और आपको उन सभी पर एक नज़र डालनी चाहिए।


मैं Erlang के रखवालों को शामिल करने के प्रतिबंधों को सहन नहीं कर सकता;)
gorsky

10

स्टैक-ओरिएंटेड प्रोग्रामिंग भाषा के बारे में कैसे ? बिल्ली अपने उच्च अंक हिट। यह है:

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

डॉ। डॉब्स ने 2008 में कैट के बारे में एक छोटा लेख प्रकाशित किया था, हालांकि भाषा थोड़ी बदल गई है।


10

यदि आप एक मजबूत (एर) बोल टाइप प्रोलॉग चाहते हैं, तो बुध एक दिलचस्प विकल्प है। मैंने इसे अतीत में दबोच लिया है और मुझे जो अलग-अलग दृष्टिकोण दिया, वह मुझे बहुत पसंद आया। यह भी moded-ness है (कौन से मापदंडों को मुक्त / तय किया जाना चाहिए) और निर्धारकवाद (कितने परिणाम हैं?) प्रकार की प्रणाली में।

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


9

मुझे थोड़ी देर हो गई है लेकिन मैं देख रहा हूं कि किसी ने भी कुछ प्रतिमानों और संबंधित भाषाओं का उल्लेख नहीं किया है जो आपके उच्च स्तर के अमूर्त और सामान्यता के लिए आपकी रुचि कर सकते हैं:


8

अपने एक बड़े मानदंड (स्थिर * टाइपिंग) को पूरा करने में असफल होने के बावजूद, मैं पायथन के लिए एक मामला बनाने जा रहा हूं। यहाँ कुछ कारण हैं जो मुझे लगता है कि आपको इस पर एक नज़र डालनी चाहिए:

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

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


* मुझे लगता है कि आप यहाँ स्थिर टाइपिंग का मतलब है, क्योंकि आप प्रकार की घोषणा करना चाहते हैं। Techincally, अजगर है जब से तुम मनमाने ढंग से, की व्याख्या नहीं कर सकते हैं कहते हैं, एक संख्या के रूप में एक स्ट्रिंग, एक जोरदार टाइप किया भाषा। दिलचस्प बात यह है कि, पायथन डेरिवेटिव्स हैं जो Boo की तरह स्थिर टाइपिंग की अनुमति देते हैं ।


हालांकि मजबूत प्रकार की प्रणाली का अर्थ केवल "स्थिर" टाइपिंग नहीं है।
डोगन

+1 लार्समैन के उत्तर पर मेरी टिप्पणी भी देखें। लेकिन कार्यात्मक के रूप में अजगर को विज्ञापित करने के लिए सावधान रहें। उदाहरण के लिए, जनरेटर भाव आमतौर पर अधिक पसंद कर रहे हैं map, filterआदि लेकिन फिर भी, जनरेटर और जनरेटर भाव कोई है जो आलसी मूल्यांकन जानता है और कार्यों कहा करने के लिए परिचित लगेगी।

16
वास्तव में? मुझे लगता है कि पायथन ज्यादातर उन लोगों के लिए विशेष रूप से कार्यात्मक है, जिन्होंने बहुत अधिक कार्यात्मक प्रोग्रामिंग नहीं की है। मैंने पायथन और हास्केल दोनों का एक उचित मात्रा में उपयोग किया है, और जबकि पायथन एक अच्छी भाषा है, और निश्चित रूप से कार्यात्मक भाषाओं से कुछ चीजें उधार ली हैं, यह अभी भी 99% अनिवार्य है।
सीए मैककैन

@camccann आप सही हैं - मेरा दृष्टिकोण अलग है, यही वजह है कि मैं इसे एक दिलचस्प विकल्प के रूप में पेश कर रहा हूं। जैसा कि किसी ने पहले अनिवार्य प्रोग्रामिंग सीखा था, मैं सराहना करता हूं कि पायथन मुझे कार्यात्मक तकनीकों का उपयोग करने देता है जहां वे उपयुक्त हैं और जहां कुछ और समझ में आता है, उनसे बचें। मैं यह मामला नहीं बना रहा हूं कि यह "कार्यात्मक" है - केवल यह कि यह एक अच्छा समझौता करता है।
टिम येट्स

हास्केल से सीखी गई आदतें आपको दूसरों की तुलना में बेहतर पायथन प्रोग्रामर बना सकती हैं जिन्होंने इसे पहली भाषा के रूप में सीखा।
u0b34a0f6ae

8

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


8

आपके विवरण को देखते हुए, मैं Ocaml या F # सुझाव दूंगा

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

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

यदि आप अपने प्रतिबंध नहीं लगाते हैं तो मैंने पायथन या एर्लैंग का सुझाव दिया है , जो दोनों आपको अपने आराम क्षेत्र से बाहर ले जाएंगे।


6

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

जैसा कि अन्य पोस्टरों ने सुझाव दिया है, प्रोलॉग और लिस्प / स्कीम अच्छी हैं, भले ही दोनों गतिशील रूप से टाइप किए गए हों। विशेष रूप से योजना के बारे में एक मजबूत सैद्धांतिक "स्वाद" के साथ कई महान पुस्तकें प्रकाशित की गई हैं। SICP पर एक नज़र डालें , जो बहुत सारे सामान्य कंप्यूटर विज्ञान ज्ञान (मेटा-सर्कुलर दुभाषियों और इसी तरह) को भी बताता है।


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

3
@delnan: हास्केल में सूची बोध भी होता है और हास्केल के मानक सूची प्रकार का उपयोग करके जनरेटर / पुनरावृत्तियों को आसानी से हास्केल में व्यक्त किया जा सकता है। इसलिए दो भाषाओं के बीच का सबसे बड़ा अंतर मेरे हिसाब से ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग और (सबसे अधिक बार) अपवित्र डेटा संरचनाएं जैसे शब्दकोष होगा।
डोगन

1
@ डिएनिज डोगन: पायथन में घोषणाओं की कमी और उचित शाब्दिक स्कूपिंग को न भूलें।
फ्रेड फू


5

आप लिस्प में देखना शुरू कर सकते हैं ।

प्रोलॉग एक शांत भाषा भी है।


5

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

यह सच है, यह आपकी पूर्वधारणाओं के अनुकूल नहीं है कि आप क्या चाहते हैं, लेकिन इसे एक रूप दें। बस यह जानते हुए कि यह पता चला है कि लायक है। पूर्ण कार्यान्वयन का एकमात्र स्रोत J Software, jsoftware.com है।


0

मुख्य धाराओं में से एक के साथ जाओ। उपलब्ध संसाधनों को देखते हुए, आपके कौशल के भविष्य के विपणन, समृद्ध डेवलपर पारिस्थितिकी तंत्र मुझे लगता है कि आपको जावा या सी # के साथ शुरू करना चाहिए ।


14
हास्केल की तुलना में, दोनों सुंदर लंगड़ी भाषा आईएमओ हैं।
लापता

9
एक हास्केलर को जावा में जाने के लिए कहना बिल गेट्स को झुग्गी में जाने के लिए कहने जैसा है। : - /
अनुपलब्ध

1
+1 कुछ ऐसा सुझाने के लिए जो आपको निश्चित रूप से निराश कर देगा। जावा और C # में पारिस्थितिक तंत्र अच्छे हैं और दोनों ही गंभीर कार्यों के लिए अनुशंसित हैं। एक निश्चित प्लस के रूप में आप सीवीआर पर जेवीएम या एफ # पर क्लोजर का उपयोग करते समय हास्केल (, जावा और सी #) के अपने ज्ञान का लाभ उठा सकते हैं।
पोनज़ाओ

6
@ponzao: Urgh, नहीं, यह सुझाव देता है कि कोई हास्केल से जावा या C # में जाता है, बस भयानक और क्रूर है। Scala, F #, और Clojure सभी समान लाभों वाली बहुत अच्छी भाषाएँ हैं जो JVM / CLR पर चलने से आती हैं।
सीए मैक्कैन

5
एक विश्लेषणात्मक दर्शन के लिए प्रमुख जावा या सी # समय की बर्बादी है।
MaD70

0

महान सवाल-- मैं हाल ही में हास्केल का पूरी तरह से आनंद लेने के बाद कई महीनों तक इसे खुद से पूछ रहा हूं, हालांकि मेरी पृष्ठभूमि बहुत अलग है (कार्बनिक रसायन)।

आपकी तरह, C और उसके ilk प्रश्न से बाहर हैं।

मैं अजगर और रूबी के बीच दो व्यावहारिक वर्कहॉर्स स्क्रिप्टिंग भाषाओं के रूप में आज (खच्चरों?) में दोलन कर रहा हूं कि दोनों के पास मुझे खुश रखने के लिए कुछ कार्यात्मक घटक हैं। रुबिस्ट / पाइथोनिस्ट बहस शुरू करने के बिना यहाँ, लेकिन इस सवाल का मेरा व्यक्तिगत व्यावहारिक जवाब है:

एक सीखें (पायथन या रूबी) जिसे आप पहली बार लागू करने का बहाना बनाते हैं।

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