लिस्प की कौन सी बोली मुझे सीखनी चाहिए? [बन्द है]


89

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

क्या कोई ऐसा है जो दूसरों की तुलना में अधिक लोकप्रिय है? क्या उनमें से कोई एक अधिक "पूर्ण" है, जैसा कि बेहतर दस्तावेज और समर्थित है? इस बोली के पेशेवरों और विपक्ष क्या हैं?



मैंने इससे पहले एक खोज की थी, लेकिन मैंने इसे टाइप किया था, लेकिन प्रश्न की प्रकृति विकसित हुई। मैं सुनिश्चित करूंगा कि पहिया को सुदृढ़ न किया जाए।
हम्फ्री बोगार्ट

तो इस सवाल और ग्रेग के ऊपर क्या अंतर है?
cjs 2

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

जवाबों:


77

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

  1. योजना।संभवतः सभी बोलियों में सबसे स्वच्छ। यह कोई संदेह नहीं है कि लिटिल स्कीमर का लिस से स्कीम में अनुवाद क्यों किया गया था। पांचवीं योजना मानक विनिर्देश, R5RS , अपने आप में एक अद्भुत शिक्षा है; यह सबसे अच्छी भाषा और लाइब्रेरी विनिर्देश हो सकता है, जिसे मैंने कभी पढ़ा है, साथ ही सबसे छोटा जो कि काफी व्यापक है। PLT योजना (अब रैकेट) मंच, एक काफी सभ्य दुभाषिया और संकलक शामिल पटकथा के लिए अच्छा है, और भी कुछ दृश्य उपकरण है कि यह सीखने के लिए उत्कृष्ट बनाने के है।

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

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

  4. Emacs लिस्प। एक LISP के संदर्भ में, यह बेहतर उदाहरणों में से एक नहीं है। इसका सबसे बड़ा दोष गतिशील स्कूपिंग है, लेकिन कई अन्य हैं। हालाँकि, यदि आप एक Emacs उपयोगकर्ता हैं, तो यह सबसे शक्तिशाली उपकरण हो सकता है जिसे आप संपादक के उपयोग में सुधार करना सीख सकते हैं। आप वास्तव में Emacs सीखने से कितना कुछ सीखेंगे, Emacs को कैसे आगे बढ़ाया जाए, यह मेरे लिए एक खुला प्रश्न है; मुझे नहीं पता कि एमएसीएस लिस्प में उच्च-क्रम के कार्यों जैसे कितनी दिलचस्प तकनीक का उपयोग वास्तव में किया जाता है।

2018 अपडेट

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

आपकी निर्णय लेने की प्रक्रिया में जो बड़ा बदलाव आता है, वह यह है कि आपको लिसप्स या लिस्प जैसी भाषाओं के लिए भी उपलब्ध होना चाहिए और उन भाषाओं या प्लेटफ़ॉर्मों के लिए उपलब्ध हैं, जिनका आप पहले से उपयोग करते हैं, यह पर्ल , रूबी , एरलैंग , गो या भी हैं माइक्रोकंट्रोलर पर सी ++


3
अलग नामस्थान होना एक मस्सा नहीं है, यह सिर्फ एक अलग डिजाइन निर्णय है। ध्यान रखें कि योजना में पहले से ही कई अन्य नाम स्थान भी हैं, इसलिए बहस लिस्प -6 के बजाय लिस्प -5 है। सीएल में मैं एक सूची "सूची" और एक कार "कार" कह सकता हूं, सुविधा के अलावा, इसका मैक्रो सिस्टम सिर्फ इतना अधिक व्यावहारिक और उपयोगी है, क्योंकि कंपाइलर चीजों को इतनी आसानी से भ्रमित नहीं करता है।
स्वेन्ते

क्लोजर में टेल कॉल ऑप्टिमाइज़ेशन नहीं है, और यह नहीं हो सकता, क्योंकि जेवीएम बायटेकोड इसका समर्थन नहीं करता है। यह सब एक "पुनरावृत्ति" विशेष रूप है जो वर्तमान फ़ंक्शन को पुन: बताता है।
स्वेन्ते

3
कर्ट: मैं दलील दूंगा कि जावा वीएम पर चलने के बाद से क्लोजर सबसे पोर्टेबल है।
justinhj

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

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

22

मैं कहता हूं कि स्कीम, केवल लिटिल स्कीमर की वजह से है , जो कि सबसे ज्यादा दिमाग से उड़ने वाली मजेदार है, लेकिन बेहद कठिन किताबें जिन्हें मैंने कभी पढ़ने की कोशिश की है।


15
SICP मत भूलना! mitpress.mit.edu/sicp । यह एक क्लासिक रीड है।
जॉरिस टिम्मरमन्स

7
द लिटिल शेपर के दो या तीन संस्करण थे , इससे पहले कि द लिटिल शेमर उन के अनुवाद के रूप में सामने आए।
cjs


8

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

यह कहना नहीं है कि मैं सीएल या योजना का आनंद नहीं लेता हूं। मैंने SICP के साथ स्कीम सीखी। और सीएल मुझे क्लोजर में ले आया। यह सब आपके लक्ष्यों पर निर्भर करता है जो मुझे लगता है। यदि आप एक लिस्प सीखना चाहते हैं जो क्लोजर के लिए बहुत व्यावहारिक है। अन्यथा सीएल या योजना दोनों ही महान हैं।


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

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

4
सीएल विकसित हुआ है और बहुत उपयोगी पुस्तकालयों के माध्यम से विकसित हो रहा है। बेस भाषा 1994 में सभी "आधुनिक" भाषाओं की तुलना में पहले से अधिक शक्तिशाली थी।
स्वेन्ते

5

मुझे CL पसंद है, क्योंकि मुझे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग पसंद है, और CLOS सबसे अच्छी ऑब्जेक्ट सिस्टम है।


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

5

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

यहाँ एक दिलचस्प लेख है कि MIT ने अपने परिचयात्मक प्रोग्रामिंग पाठ्यक्रम में स्कीम से पायथन में क्यों स्विच किया


3

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

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

लेक्सिकल और डायनेमिक स्कोप के बीच अंतर सीखना महत्वपूर्ण है, और यदि आप कॉमन लिस्प और एलीस्प दोनों सीखते हैं, तो आप दोनों के निहितार्थों के पार आ जाएंगे।


0

LFE (लिस्प फ्लेवर्ड एर्लैंग) अच्छा होगा। आपके पास Erlang VM के ऊपर लिस्प सिंटैक्स हो सकता है।


0

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

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