मुझे स्कीम से क्या सीखना चाहिए?


10

मैं सोच रहा था कि स्कीम से मैं कौन सी अनूठी विशेषताएँ सीख सकता हूँ जो मुझे एक बेहतर प्रोग्रामर बनने में मदद करेंगी?

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

क्या योजना / लिस्प के लिए अद्वितीय है जो मुझे कुछ नया सिखाएगा?


3
लिस्प ने गहन ज्ञानोदय के अनुभव के लिए सीखने लायक है जो आपके पास होगा जब आप अंततः इसे प्राप्त करते हैं; वह अनुभव आपको अपने बाकी दिनों के लिए एक बेहतर प्रोग्रामर बना देगा, भले ही आप वास्तव में कभी भी लिस्प का उपयोग न करें। - एरिक रेमंड
रॉबर्ट हार्वे


1
@Robert Harvery: इसके अलावा: xkcd.com/224
Poindexter

2
यह वर्तमान रूप में यह प्रश्न विशेष रूप से रचनात्मक नहीं है। यदि आप अधिक विशिष्ट जानकारी के लिए पूछने के लिए इसे फिर से काम कर सकते हैं तो यह उपयोगी हो सकता है।
ChrisF

पोस्ट-लिनियन युग में शिक्षण भाषाएं भी देखें , और पाठ्यपुस्तक कि यह पेपर संदर्भ: प्रोग्रामिंग भाषाएं: अनुप्रयोग और व्याख्या , जो रैकेट भाषा , योजना की एक बोली का उपयोग करती है ।
रॉबर्ट हार्वे

जवाबों:


7

शायद लिस्प की सबसे महत्वपूर्ण परिभाषित विशेषता "डेटा के रूप में कोड" है।  आपको वह अनुभव किसी अन्य भाषा के साथ बिल्कुल नहीं मिलेगा। सी # में, निकटतम एनालॉग अभिव्यक्ति पेड़ हैं।

यह वह गुण है जो लिस्प को पार्स करने के लिए एक उत्कृष्ट भाषा बनाता है। यह वह गुण भी है जो पॉल ग्राहम को लिस्प के बारे में कहने के लिए प्रेरित करता है: "लिस्प के बारे में असामान्य बात - वास्तव में, लिस्प की परिभाषित गुणवत्ता यह है कि यह अपने आप में लिखा जा सकता है।" हालाँकि सेल्फ-होस्टिंग कंपाइलर कोई नई बात नहीं है, लेकिन कोई भी भाषा इसे उतनी अच्छी तरह से नहीं करती है जितनी लिस्प करती है।

मेटाप्रोग्रामिंग (कुछ जिसमें लिस्प भी उत्कृष्ट है) भी सीखने लायक चीज है।

पॉल ग्राहम http://www.paulgraham.com/avg.html द्वारा एवरीस को पीटना


1
मुझे लगता है कि इसका कारण यह नहीं था कि "अहा!" उस पल जब ESR ने मुझसे वादा किया था कि मेरे पास पहले से ही Prolog में "डेटा के रूप में कोड" रहस्योद्घाटन था।
फ्रैंक शियरार

1
क्या हास्केल में "कोड के रूप में डेटा" विशेषता है? या सौंदर्य गतिशील टाइपिंग और प्रतिबिंब पर बहुत अधिक निर्भर करता है?
जॉय एडम्स

1
@ जॉय: मुझे लगता है कि तथ्य यह है कि टेम्पलेट हास्केल मौजूद है इसका मतलब है कि हास्केल में "कोड के रूप में डेटा" विशेषता का अभाव है।
j_random_hacker

4

हां, यह आपको पुनरावर्ती फैशन में सोचने में मदद करेगा। मैंने केवल एक प्रोग्रामिंग लैंग्वेज क्लास में एक महीने के लिए इसका (स्कीम) अध्ययन किया और इससे मुझे यह पता लगाने में मदद मिली कि मैं प्रोग्रामिंग समस्याओं को कैसे सोचता हूं और हल करता हूं।

अन्य प्रोग्रामिंग प्रतिमानों की कोशिश करना हमेशा मूल्यवान होता है; फिर आप नए विचारों के साथ OO की दुनिया में लौट आए।

वाक्य रचना नहीं, बल्कि तर्क, यह महान मस्तिष्क व्यायाम है। पुनरावृत्ति और सूचियों के दिलचस्प उपयोग से प्राप्त, आईएमएचओ के अलावा और बहुत कुछ नहीं है, लेकिन यह इसके लायक है।


योजना के लिए अद्वितीय नहीं है। किसी भी (अच्छी तरह से, लगभग किसी भी) कार्यात्मक भाषा पुनरावृत्ति के लिए ठीक है।

मैं सहमत हूं, लेकिन ओपी 'मुख्यधारा' की भाषाओं की तुलना में इस योजना में रुचि रखता है ....
जेवियर नोडेट

1

निरंतरता :

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

और फिर मैक्कार्थी के अस्पष्ट ऑपरेटर को लागू करने का प्रयास करें :

1963 में, लिस्प के आविष्कारक जॉन मैकार्थी ने एक गणितीय थ्योरी ऑफ़ कम्प्यूटेशन के लिए पेपर ए बेसिस प्रकाशित किया, जिसमें उन्होंने फंक्शन (शब्द के कंप्यूटर प्रोग्राम अर्थ में) एंबेड (।) का प्रस्ताव दिया। विचार यह है कि घात (x, y) पहले x के बराबर है। लेकिन अगर बाद में गणना में यह पाया जाता है कि इससे किसी प्रकार का विरोधाभास होता है तो x का मान वापस निकाल दिया जाता है और उसे y से बदल दिया जाता है। यह पहले की तुलना में अधिक जटिल व्यवसाय हो सकता है। एक मूल्य को अनिवार्य रूप से वापस लेने का मतलब है कि गणना की पूरी स्थिति को वापस उसी स्थान पर पहुंचाना, जहां एम्बे ने मान x लौटाया था, और फिर y के मूल्य में फिसल गया। इसका मतलब है कि किसी तरह ठंड और पूरे राज्य की नकल जब एक्स पहली बार लौटा था। जब एक विरोधाभास पाया जाता है कार्यक्रम के पूरे राज्य को छोड़ दिया जाता है और जमे हुए संस्करण के साथ बदल दिया जाता है जिसे पुन: सक्रिय किया जाता है। इन जमे हुए राज्यों को निरंतरता के रूप में जाना जाता है। कई मायनों में यह एसिड पर एक गोटो बयान की तरह है। यह आपके कोड पर एक मनमाने स्थान पर कूदने का कारण बन सकता है। लेकिन निरंतरता GOTO की तुलना में अच्छे हैं क्योंकि वे तार्किक तर्क के लिए अधिक उत्तरदायी हैं।


1

मैं निम्नलिखित के बारे में सोच सकता हूं:

  • वास्तविक मैक्रोज़ (कोड उत्पन्न करने के लिए भाषा की पूरी शक्ति का उपयोग करके)
  • समरूपता (डेटा के रूप में कोड, डेटा के रूप में कोड)
  • आलसी मूल्यांकन
  • निरंतरता

मुझे यह भी लगता है कि लिस्प भाषाओं को डोमेन विशिष्ट भाषाओं (डीएसएल) को परिभाषित करने के लिए भयानक होना चाहिए। यदि आप इसके बारे में पहले से ही नहीं जानते हैं तो आप इसे पढ़ना चाहते हैं।

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