लिस्प -1 और लिस्प -2 के बीच अंतर क्या है?


94

मैंने लिस्प -1 और लिस्प -2 के बीच के अंतर को समझने की कोशिश की है और यह क्लोजर से कैसे संबंधित है लेकिन मुझे अभी भी ठीक से समझ नहीं आया है। क्या कोई मुझे बता सकता है?

जवाबों:


68

विकिपीडिया के अनुसार :

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

यह मूल रूप से है कि क्या चर और फ़ंक्शंस बिना टकराव के एक ही नाम हो सकते हैं। क्लोजर एक लिस्प -1 है जिसका अर्थ है कि यह एक ही नाम को एक फ़ंक्शन और एक चर के लिए एक साथ उपयोग करने की अनुमति नहीं देता है।


11
एक लिस्प -2 अधिक भ्रमित करने वाले कार्य और चर एक ही नाम के साथ नहीं है?
appshare.co

39
यही कारण है कि लिस्प -2 बोलियों का उपयोग करने वाले प्रोग्रामर समान नाम वाले कार्यों और चर के लिए अपने रास्ते से बाहर नहीं जाते हैं। listअक्सर एक फ़ंक्शन पैरामीटर के रूप में उपयोग किया जाता है और कोई भी चीज़ नहीं होती है, OMG जो (list ...)एक मानक फ़ंक्शन के बाद से इतना भ्रमित है। listएक चर के रूप में कई फ़ंक्शन फ़ंक्शन का उपयोग नहीं करते listहैं, या उस चर के पास इसका उपयोग नहीं करते हैं। जब ऐसा होता है तब भी यह बहुत बुरा नहीं है (list foo list):। यह किसी वाक्य से अधिक भ्रामक नहीं है जैसे "अच्छी लड़ाई लड़ें" जहां एक ही शब्द संज्ञा और क्रिया के रूप में दिखाई देता है।
काज

5
@Zubair Java में और भी अधिक रिक्त स्थान हैं। आप एक वर्ग, एक विधि और एक चर को समान नाम से परिभाषित कर सकते हैं।
छत

19
एक mnemonic के रूप में, मैं लिस्प 1s को 1 नामस्थान और 2 लिस्प्स वाले 2 नामस्थान (कार्यों के लिए एक और चर के लिए एक) होने के बारे में सोचता हूं।
निक

4
@NickMcCurdy एक महामारी के रूप में, मुझे लगता है कि एक साइकिल के दो पहिए होते हैं, और तिपहिया तीन होते हैं।
कज़

71

आप रिचर्ड गेब्रियल के इस पत्र को पढ़ना पसंद कर सकते हैं । यह उन मुद्दों का एक सारांश है जो लिस्प 1 बनाम लिस्प 2 में लिस्प समुदाय पर चर्चा कर रहे थे। यह पहले कुछ सेक्शन में थोड़ा घना और धीमा है, लेकिन जब आप पिछले सेक्शन 5 को प्राप्त करते हैं, तब तक पढ़ना बहुत आसान होता है।

मूल रूप से, Lisp1 में एक एकल वातावरण होता है जो प्रतीकों को मानों के लिए मैप करता है, और वे मान या तो "नियमित" या फ़ंक्शंस हो सकते हैं। Lisp2 में (कम से कम) दो नामस्थान हैं (प्रतीकों में एक फ़ंक्शन मान के लिए एक स्लॉट है और एक नियमित मूल्य के लिए है)। तो, Lisp2 में, आपके पास foo नाम का एक फंक्शन और foo नाम का एक मान हो सकता है, जबकि Lisp1 में, नाम फू केवल एक मान (फ़ंक्शन या अन्यथा) को संदर्भित कर सकता है।

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


7
गैब्रियल पेपर के अधिक गूढ़ वर्गों में से एक, मल्टीप्रोसेसिंग पर धारा 11 है। उस खंड में, उनका तात्पर्य है कि Lisp1 प्रोग्रामिंग की एक कार्यात्मक शैली के लिए अधिक अनुकूल है, इसलिए बहुविधता के लिए अधिक अनुकूल है। जाहिर है, यह ब्याज आरटी क्लोजर का है। लेकिन मैं वास्तव में निश्चित नहीं हूं कि लिस्प 1 एफपी के लिए अधिक अनुकूल क्यों है। किसी को भी इस में अंतर्दृष्टि है?
पीटर मैक्लैन

40
शायद इसलिए कि एफपी का प्रमुख बिंदु फ़र्स्ट क्लास वैल्यूज़ के रूप में फंक्शन्स को ट्रीट करना है, इसलिए उन्हें अन्य सभी वैल्यूज़ की तरह उसी तरह से ट्रीट करना ज्यादा सुविधाजनक और
कॉन्सेप्टिव क्लीनर है

10
@PeterMcLain जब Lisp-1 बोलियों के उपयोगकर्ता कहते हैं कि Lisp-1 कार्यात्मक प्रोग्रामिंग के लिए अधिक प्रवाहकीय है, तो उनका मतलब यह है कि आपको कोड funcallऔर functionऑपरेटरों से भरा सामान नहीं रखना है । ये एक लिस्प -1 में गायब हो जाते हैं।
काज

3
एक उदाहरण जब एक स्कीमर लिस्प लिखने की कोशिश करता है तो क्या होता है: emacs.stackexchange.com/q/28979/2787
छत

2
आपने लिस्प -2 के बारे में "कम से कम" वाक्यांश का उपयोग किया। 2 मामलों के बीच का साधारण अंतर यह है: क्या प्रतीक s-अभिव्यक्ति के शीर्ष स्थान पर है, या नहीं (यदि ऐसा है, तो फ़ंक्शन नाम स्थान में, अन्य नाम स्थान में खोज)। क्या आप उन 2 मामलों की तुलना में कुछ अन्य उदाहरण दे सकते हैं?
डैनियल डिनिएज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.