2011-01-13 11 views
13

के बीच कोई बड़ा वाक्यविन्यास अंतर है, मैं नई भाषा सीखना चाहता हूं और मैंने लिस्प के साथ शुरुआत करना सोचा। मैं जानना चाहता हूं कि क्या मैं लिस्प सीखता हूं, क्या मुझे क्लोजर (न्यूनतम प्रयास के साथ) भी पता है, क्या लिस्प और क्लोजर के बीच बड़ा वाक्यविन्यास अंतर है?क्लोजर और लिस्प

उत्तर

10

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

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

आपको Which Lisp should I learn? के उत्तरों में अधिक जानकारी मिल सकती है।

+5

यह गलत है। लिस्प में बहुत सारे वाक्यविन्यास हैं। टोंस। सीएल में DEFCLASS, DEFSTRUCT, LOOP और अन्य के सिंटैक्स के उदाहरण के रूप में जांचें। नीचे एस-एक्सप्रेशन के लिए वाक्यविन्यास है - जो भी तुच्छ नहीं है। –

+4

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

+0

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

2

मुझे लगता है कि लिस्प द्वारा मेरा मतलब आम लिस्प है, क्योंकि 'लिस्प' स्वयं एक विशिष्ट भाषा की तुलना में भाषाओं के परिवार (जिसमें क्लोजर शामिल है) से अधिक है। क्लोजर में कुछ वाक्य रचनात्मक परिवर्तन हैं जो एक और आधुनिक लिस्प बनने का इरादा रखते थे। उदाहरण के लिए आप [] एस के साथ वैक्टर बना सकते हैं, {} s के साथ मानचित्र, जो सामान्य लिस्प का हिस्सा नहीं हैं। और निश्चित रूप से जावा इंटरऑप अनिवार्य रूप से क्लोजर का एक महत्वपूर्ण हिस्सा बन जाता है।

+5

[] और {} सीएल में उपयोगकर्ता एक्सटेंशन के लिए आरक्षित हैं। वेक्टर # (...) के रूप में लिखे गए हैं। उस स्तर पर चरित्र वाक्यविन्यास पुस्तकालयों द्वारा प्रदान किया जा सकता है - और वास्तव में है। हो सकता है कि सीएल अधिक आधुनिक लिस्प है, क्योंकि सिंटैक्स उपयोगकर्ता एक्स्टेंसिबल है और [] और {} का उपयोग पुस्तकालयों द्वारा किया जा सकता है? –

+0

आम लिस्प को आमतौर पर लिस्प कहा जाता है। इसी तरह, लिस्प आमतौर पर आम लिस्प का मतलब है। लिस्प परिवार आमतौर पर लिस्प, या लिस्प्स के रूप में दर्शाया जाता है। – Marko

3

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

  • कोड डेटा है। मैक्रोज़ सामान्य कार्य हैं जो कोड में हेरफेर करते हैं।

  • डेटा और कोड का प्रतिनिधित्व करने के लिए S-expressions का उपयोग करें।

  • एक मूल संरचना के रूप में सूची/अनुक्रम की अवधारणा।

  • प्रथम श्रेणी के कार्यों के साथ कार्यात्मक प्रोग्रामिंग। यदि आप एक अच्छी तरह से पता है, तो कोर -

इसके अलावा, वहाँ वाक्य रचना में मतभेद के बहुत सारे, पुस्तकालयों, क्रम वातावरण आदि मेरे विचार में अंतर शायद सी # बनाम सी ++ के लगभग समान है अवधारणाएं परिचित होंगी लेकिन अभी भी बहुत सारे मौलिक मतभेद हैं।

आप जो सीखते हैं पढ़ाई के दौरान अपने पहले लिस्प अपने अगले पर लागू हो जाएगा के इस list of ways that Clojure is different from other Lisps

+0

कार्यों और मैक्रोज़ के बीच एक "छोटा" अंतर है। समारोह प्रथम श्रेणी है। मैक्रोज़ नहीं हैं। – boucekv

1

लैम्ब्डा मानकों (तर्क मान) के रूप में Clojure उपयोग वैक्टर, लेकिन आप एक मैक्रो defun और कॉमन लिस्प में इस तरह दिखेगा के साथ लैम्ब्डा लिख सकते हैं। क्लोजर के पास कोमा का उपयोग करके जावा ऑब्जेक्ट विधियों और फाइलों तक पहुंच है और यह नाम सामान्य फंक्शन कॉल

(.toString 10) जैसा दिखता है - नंबर 10 पर स्ट्रिंग करने के लिए विधि को विधि में कॉल करेगा .toString एक फ़ंक्शन नहीं है। यदि आप .toString के मान को जांचने का प्रयास करते हैं तो यह exeption फेंक देता है .toString परिभाषित प्रतीक नहीं है।

और कोमा क्लोजर के बजाय अर्ध-उद्धरण (ज्यादातर मैक्रोज़ में) में भी टाइल्ड का उपयोग करें।

संबंधित मुद्दे