जहां व्यावहारिक तौर पर कॉमन लिस्प का उपयोग करना सीखें [बंद]


79

मैं एक C ++ प्रोग्रामर हूं जो कॉमन लिस्प सीखने की कोशिश कर रहा हूं। मैंने लैंड ऑफ लिस्प जैसी कुछ पुस्तकों को देखा है और लिस्प के विभिन्न गुणों के बारे में कई ऑनलाइन लेख पढ़े हैं। हालांकि, मुझे कुछ सलाह की जरूरत है।

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

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

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

  • फाइलें कैसे पढ़ें
  • किसी फ़ाइल को कैसे पढ़ें, फ़ाइल में शब्दों को बदलें, और परिणाम को फ़ाइल में वापस लिखें
  • एक निर्देशिका और अन्य फाइलसिस्टम सामान में फ़ाइलों को मिटाएँ
  • SQL db के साथ सहभागिता करें
  • सॉकेट पर संचार करें
  • वेबसर्वर की तरह सामान के लिए थ्रेडिंग
  • GUIs बनाएँ
  • बाइनरी फ़ाइलों पर कार्रवाई करें
  • एक पार्सर लिखें (लिस्प में लिस्प के लिए एक दुभाषिया नहीं, जिसे मैं समझता हूं कि लिस्प की 5 पंक्तियों की तरह है)
  • ऑपरेटिंग सिस्टम (यानी C या C ++ में लिखे गए सामान) के साथ इंटरेक्ट करने के लिए लिस्प मूल रूप से नहीं कर सकते
  • सी में लिस्प एक्सटेंशन कैसे लिखें (क्या यह संभव है?)
  • एक लुआ दुभाषिए को एम्बेड करें (क्या यह संभव है?)

और यह भी एक कम तुरंत व्यावहारिक नोट पर, लिस्प में आम डेटा संरचनाओं को कैसे लागू किया जाए जैसे कि ढेर, ढेर, बाइनरी सर्च ट्री, आदि। हालांकि यह लिस्प की सूची संचालन जैसे carऔर cdrसही तरीके से उपयोग कर सकता है । मुझे नहीं पता।

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

हालाँकि, इससे पहले ( इन? ) अनिवार्य भाषा में प्रोग्रामिंग होने से, मैं वास्तविक दुनिया के अनुप्रयोगों को लिखने के लिए जो नया ज्ञान प्राप्त करता हूं उसका उपयोग करने के लिए उत्सुक हूं। तो लिस्प के साथ व्यावहारिक सॉफ्टवेयर लिखना सीखने का सबसे तेज़ तरीका क्या है?

वैसे, मैंने पीटर सीबेल के प्रैक्टिकल कॉमन लिस्प को देखा है , लेकिन टीओसी को देखते हुए, यह केवल उन कुछ चीजों को छूता है, जो मैं लिस्प का उपयोग करना सीखना चाहता हूं।

एक और सवाल अगर मुझे हो सकता है (क्षमा करें यदि यह दो प्रश्नों को एक में जोड़ रहा है), तो मुझे लिस्प के कार्यों और सामान का संदर्भ कहां मिल सकता है?

और मैं वास्तव में लिस्प को पसंद करना चाहता हूं ।


3
अच्छा प्रश्न। मैं स्वयं, C ++ प्रोग्रामर होने के नाते, इस गर्मियों में लिस्प सीख रहा हूं, मुख्य रूप से उत्तर में प्रस्तावित पुस्तकों के साथ। अब तक बहुत खुश है, लेकिन अभी भी मैक्रों के माध्यम से मेरा रास्ता पा रहा है। पॉल ग्राहम द्वारा लिस्प पर एक असली गहना है। साथ ही, Emacs Lisp की सामग्री आपको सामान्य रूप से Lisp के साथ नज़र रखने में मदद करती है, साथ ही आपको संपादक के भीतर से वास्तविक उपयोगी स्क्रिप्ट लिखने की अनुमति देती है।
डिएगो सेविला

अब Docs.SO पर कॉमन लिस्प के आरंभिक पृष्ठ पर एक व्यापक कॉमन लिस्प संसाधन पृष्ठ है।
गुस्ताव बर्तराम

कॉमन लिस्प कुकबुक के लिए अब अप टू डेट भी है । इसका TOC हालांकि अभी तक व्यापक नहीं है, इसलिए हम भयानक सीएल सूची में भयानक और आधुनिक पुस्तकालयों की खोज करते हैं । और ई। वेइट्ज़ के "सीएल व्यंजनों" के लिए +1।
एहविंस

जवाबों:


95

मैं ' प्रैक्टिकल कॉमन लिस्प ' पढ़ने का प्रस्ताव रखूंगा , क्योंकि यह पहले से ही आपके कुछ सवालों के जवाब देता है।

संभवत: तीन से चार किताबें हैं जिन्हें आपको पढ़ना चाहिए :

आम लिस्प संदर्भ

नियमावली

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

आम लिस्प कार्यान्वयन के लिए प्रलेखन:

SLIME ( Emacs- आधारित लिस्प-आईडीई) के पास SLIME उपयोगकर्ता मैनुअल है

आम लिस्प पुस्तकालयों के लिए प्रलेखन:

पुस्तकालयों

पुस्तकालयों के लिए उपयोग करें

अब आपके कुछ बिंदुओं को देख रहा है:

  • फाइलें कैसे पढ़ें

हाइपरस्पीक में फाइल्स और स्ट्रीम डिक्शनरी देखें । OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, के साथ ...

  • किसी फ़ाइल को कैसे पढ़ें, फ़ाइल में शब्दों को बदलें, और परिणाम को फ़ाइल में वापस लिखें

ऊपर का उपयोग करें। इसे भी देखें: WRITE और संबंधित

  • एक निर्देशिका और अन्य फाइलसिस्टम सामान में फ़ाइलों को मिटाएँ

ऊपर देखो। प्रत्यक्ष, पथनाम, ...

  • SQL db के साथ सहभागिता करें

उदाहरण के लिए CLSQL लाइब्रेरी का उपयोग करें।

  • सॉकेट पर संचार करें

अपने लिस्प के मैनुअल को देखें या पोर्टेबल लाइब्रेरी में से किसी एक का उपयोग करें। Quicklisp देखें।

  • वेबसर्वर की तरह सामान के लिए थ्रेडिंग

अपने लिस्प के मैनुअल को देखें या पोर्टेबल लाइब्रेरी में से किसी एक का उपयोग करें। Quicklisp देखें।

  • GUIs बनाएँ

निर्भर करता है। देखें Quicklisp या एक कार्यान्वयन विशिष्ट पुस्तकालय।

  • बाइनरी फ़ाइलों पर कार्रवाई करें

फ़ाइल और स्ट्रीम संचालन के लिए हाइपरस्पेक देखें। राइट-BYTE, READ-BYTE। बाइनरी स्ट्रीम के रूप में एक स्ट्रीम खोलें।

  • एक पार्सर लिखें (लिस्प में लिस्प के लिए एक दुभाषिया नहीं, जिसे मैं समझता हूं कि लिस्प की 5 पंक्तियों की तरह है)

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

  • ऑपरेटिंग सिस्टम (यानी C या C ++ में लिखे गए सामान) के साथ इंटरेक्ट करने के लिए लिस्प मूल रूप से नहीं कर सकते

निर्भर करता है। देखें Quicklisp या एक कार्यान्वयन विशिष्ट पुस्तकालय।

  • सी में लिस्प एक्सटेंशन कैसे लिखें (क्या यह संभव है?)

निर्भर करता है। देखें Quicklisp या एक कार्यान्वयन विशिष्ट पुस्तकालय। -> एफएफआई

अंतिम सलाह: अन्य लेखकों से कोड पढ़ें।

अन्य लिस्प कोड का अध्ययन करें। वहाँ बाहर बहुत विविध लिस्प कोड है। वेब सर्वर से संगीत रचना सॉफ्टवेयर तक।


2
बहुत सारे सामान की तरह लगता है कार्यान्वयन विशिष्ट है। क्या सी जैसी कोई चीज है जो कार्यान्वयन विशिष्ट नहीं है लेकिन ऑपरेटिंग सिस्टम विशिष्ट है? ऐसा लगता है कि यह आपके कोड को लागू किए गए उपयोग का उपयोग करने वाले हर व्यक्ति को करना संभव नहीं है। इसके अलावा मुझे वास्तव में एआई में कोई दिलचस्पी नहीं है।
न्यूलिस्पर

4
@ न्यूवेलपर: बहुत सारे पोर्टेबिलिटी लाइब्रेरी हैं। Quicklisp देखें।
रेनर जोसविग

4
@ न्यूवेलपर: यदि आप एआई में रुचि नहीं रखते हैं, तो भी आपको कुछ साहित्य पढ़ना चाहिए, क्योंकि यह 'प्रतीकात्मक प्रोग्रामिंग' दृष्टिकोण का वर्णन करता है जिसके लिए लिस्प का आविष्कार किया गया था।
रेनर जोसविग

2
@ न्यूवेलपर: यह एक सुंदर पूर्ण उत्तर है। लिस्प पाइथन के करीब है कि यह कैसे ओएस और सी / सी + + कॉल से संबंधित है। यह एक एफएफआई (विदेशी फ़ंक्शन इंटरफ़ेस) को एक साथ रखने के लिए बहुत सीधा कहा जाता है। यह भी ध्यान देने योग्य है कि ऐसा लगता है कि वेब पर कॉमन लिस्प के उपयोगकर्ताओं का प्रीबॉन्डेंस SBCL का उपयोग कर रहा है।
पॉल नाथन

2
मैं कुछ ठोस पुस्तकालयों को जोड़ूंगा: सॉकेट: यूकेट; वेबसर्वर: hunchentoot; थ्रेडिंग: बोर्डो-थ्रेड्स, चैनल; OS- इंटरेक्शन / लिंकिंग सी-सामान: CFFI, UFFI।
Svante

6

की जाँच करें Cliki कॉमन लिस्प विकि यह कॉमन लिस्प के लिए उपलब्ध है जो आप अपने सभी आइटम को पूरा करने में मदद करेगा पुस्तकालयों की एक सूची प्रदान करता है।

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

आप सी में लिस्प के लिए एक्सटेंशन लिख सकते हैं जिसके आधार पर आप किस कार्यान्वयन का उपयोग कर रहे हैं। उदाहरण के लिए Emacs-Lisp आपको ऐसा करने की अनुमति देता है, हालांकि यह आम लिस्प नहीं है। आमतौर पर आप जो करना चाहते हैं, उसे कॉमन लिस्प में कोड लिखते हैं और फिर विभिन्न लिस्प कंपाइलर घोषणाओं का उपयोग करके या जहां आप एक विदेशी फ़ंक्शन इंटरफ़ेस का उपयोग करते हैं, दूसरी विधि का उपयोग करके इसे जितना संभव हो उतना अनुकूलित कर सकते हैं।

थ्रेडिंग इस बात पर निर्भर करती है कि आप किस कार्यान्वयन का उपयोग करते हैं, लेकिन मुझे लगता है कि उनमें से अधिकांश में अब धागे हैं।

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

किसी ने लिस्प के लिए जीयूआई विकल्पों की एक सूची तैयार की :

  • cl-gtk2, GTK gui लाइब्रेरी का एक इंटरफ़ेस
  • मैकलम
  • गहरा लाल रंग
  • आम क्यूटी
  • EQL

1
आम लिस्प कुकबुक वास्तव में उपयोगी लगती है। जैसे मैंने दूसरे लड़के से कहा, ऐसा लगता है कि बहुत सारा सामान विशिष्ट है। यह उचित नहीं लगता है कि हर कोई आपके द्वारा उपयोग किए जा रहे कोड को चलाने में सक्षम होना चाहता है। क्या ऐसा ही है?
न्यूलिस्पर

हाँ, यह कैसा है, कुछ लोग कोशिश करते हैं और एएनएसआई कॉमन लिस्प मानक से चिपके रहते हैं या कई कार्यान्वयन पर काम करने वाले पुस्तकालयों के साथ छड़ी करने की कोशिश करते हैं, इसलिए यह बहुत परेशानी नहीं है।

यदि आप एएनएसआई कॉमन लिस्प से चिपके रहते हैं, जैसे कि फाइल सिस्टम सामान, नेटवर्किंग सामान, आदि से आप बहुत कुछ करने की क्षमता खो देते हैं?
न्यूलीपर

लिस्प ने कार्यान्वयन विशिष्ट एपीआई के शीर्ष पर पोर्टेबल पुस्तकालयों को लिखना आसान बना दिया है, इसलिए मुझे इसके बारे में चिंता नहीं होगी।
पावेल पेनेव

अरे, क्या आप कुकबुक के url को बदलने का मन करेंगे lispcookbook.github.io/cl-cookbook में बदलना चाहेंगे ? यह एक ही सामग्री है, लेकिन बड़े पैमाने पर संवर्धित है, पुरानी सामग्री को हटा दिया गया है, और बेहतर दिखने वाले आकार में। इसका गिट इतिहास देखें! धन्यवाद।
एहविंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.