lisp - आम लिस्प का व्यावहारिक रूप से उपयोग करने के तरीके को सीखना




common-lisp (2)

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

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

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

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

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

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

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

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

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

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

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


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

शायद आपको तीन से चार पुस्तकें पढ़नी चाहिए :

सामान्य लिस्प संदर्भ

नियमावली

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

सामान्य लिस्प कार्यान्वयन के लिए दस्तावेज़ीकरण:

SLIME ( SLIME आधारित Lisp-IDE) में एक SLIME उपयोगकर्ता मैनुअल है

सामान्य लिस्प पुस्तकालयों के लिए दस्तावेज़ीकरण:

पुस्तकालय

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

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

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

HyperSpec में फ़ाइलों और स्ट्रीम शब्दकोश को देखें । ओपन-स्ट्रीम, रीड, रीड-लाइन, रीड-चायर, रीड-बाइट, रीड-सेक्वेंस, ...

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

ऊपर प्रयोग करें। यह भी देखें: लिखें और संबंधित।

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

ऊपर देखो। निर्देशिका, पथनाम, ...

  • एक एसक्यूएल डीबी के साथ बातचीत करें

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

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

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

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

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

  • जीयूआई बनाएँ

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

  • बाइनरी फाइलों पर संचालन करें

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

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

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

  • लिस्प मूल रूप से नहीं कर सकता है ऑपरेटिंग सिस्टम (यानी सी या सी ++ में लिखी गई सामग्री) के साथ बातचीत करें

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

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

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

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

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


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

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

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

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

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

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

  • सीटी-gtk2, जीटीके गुई पुस्तकालय के लिए एक इंटरफ़ेस
  • McClim
  • गहरा लाल रंग
  • सामान्य क्यूटी
  • EQL