कुछ महीनों के बारे में सीखने और लिस्प के साथ खेलने के बाद, दोनों सीएल और क्लोजर का एक सा, मैं अभी भी C # के बजाय इसमें कुछ भी लिखने के लिए एक सम्मोहक कारण नहीं देख रहा हूं।
मैं वास्तव में कुछ सम्मोहक कारणों को पसंद करूंगा, या किसी को यह बताने के लिए कि मैं वास्तव में कुछ बड़ा याद कर रहा हूं ।
लिस्प की ताकत (मेरे शोध के अनुसार):
- कॉम्पैक्ट, अभिव्यंजक अंकन - C # से अधिक, हां ... लेकिन मुझे लगता है कि C # में भी उन विचारों को व्यक्त करने में सक्षम हो सकता हूं।
- कार्यात्मक प्रोग्रामिंग के लिए निहित समर्थन - LINQ एक्सटेंशन विधियों के साथ C #:
- मानचित्रकार =। चयन (लंबोदर)
- mapcan =। चयन (लंबोदर) ।अगले ((a, b) => a.Union (b))
- कार / पहली = .First ()
- cdr / rest = .Skip (1) .... आदि।
- लैम्ब्डा और उच्च-क्रम फ़ंक्शन समर्थन - C # में यह है, और सिंटैक्स यकीनन सरल है:
- "(लंबो (x) (शरीर))" बनाम "x => (शरीर)"
- क्लोजर में "" ("" "%", "% 1", "% 2") अच्छा है
- विधि प्रेषण वस्तुओं से अलग - C # में विस्तार विधियों के माध्यम से है
- मल्टीमिथोड प्रेषण - C # में यह मूल रूप से नहीं है, लेकिन मैं इसे कुछ घंटों में फ़ंक्शन कॉल के रूप में लागू कर सकता था
- कोड डेटा (और मैक्रोज़) है - हो सकता है कि मैंने मैक्रोज़ को "प्राप्त" नहीं किया है, लेकिन मैंने एक भी उदाहरण नहीं देखा है जहां मैक्रो के विचार को एक फ़ंक्शन के रूप में लागू नहीं किया जा सकता है; यह "भाषा" नहीं बदलता है, लेकिन मुझे यकीन नहीं है कि यह एक ताकत है
- डीएसएलएस - इसे केवल फ़ंक्शन कंपोजिशन के माध्यम से कर सकते हैं ... लेकिन यह काम करता है
- अनकैप्ड "एक्सप्लोसिव" प्रोग्रामिंग - स्ट्रक्चर्स / क्लासेस के लिए, C # की ऑटोप्रॉपर्टीज़ और "ऑब्जेक्ट" काफी अच्छी तरह से काम करती हैं, और आप आसानी से मजबूत टाइपिंग में बढ़ सकते हैं जैसे आप साथ चलते हैं
- गैर-विंडोज हार्डवेयर पर चलता है - हाँ, तो? कॉलेज के बाहर, मैंने केवल एक व्यक्ति को जाना है जो घर पर विंडोज नहीं चलाता है, या कम से कम विंडोज के एक वीएम पर * निक्स / मैक। (फिर फिर, शायद यह जितना मैंने सोचा था उससे अधिक महत्वपूर्ण है और मैं अभी दिमाग लगा रहा हूं ...)
- बॉटम-अप डिज़ाइन के लिए REPL - ठीक है, मैं मानता हूं कि यह वास्तव में बहुत अच्छा है, और मैं इसे C # में याद करता हूं।
लिस्प में जो चीज़ें मुझे याद आ रही हैं (C #, .NET, विज़ुअल स्टूडियो, रेस्पर के मिश्रण के कारण):
- नेमस्पेस। स्थैतिक तरीकों के साथ भी, मैं उन्हें उनके संदर्भ को वर्गीकृत करने के लिए एक "वर्ग" से बाँधना पसंद करता हूं (क्लजुरे को ऐसा लगता है, सीएल नहीं लगता है।)
- महान संकलन और डिज़ाइन-टाइम समर्थन
- प्रकार प्रणाली मुझे मेरे द्वारा पास किए गए डेटास्ट्रक्टर्स की "शुद्धता" निर्धारित करने की अनुमति देती है
- कुछ भी गलत तरीके से रेखांकित किया जाता है; मुझे पता करने के लिए रनटाइम तक इंतजार करने की जरूरत नहीं है
- कोड में सुधार (जैसे कि एक अनिवार्य के बजाय एक एफपी दृष्टिकोण का उपयोग करना) ऑटोस्गैस्टेड हैं
- GUI विकास उपकरण: WinForms और WPF (मुझे पता है कि Clojure की जावा GUI पुस्तकालयों तक पहुंच है, लेकिन वे मेरे लिए पूरी तरह से विदेशी हैं।)
- GUI डिबगिंग टूल: किसी भी स्तर पर कोड में कूदने की क्षमता के साथ ब्रेकपॉइंट, स्टेप-इन, स्टेप-ओवर, वैल्यू इंस्पेक्टर (टेक्स्ट, xml, कस्टम), घड़ियाँ, डिबग-बाय-थ्रेड, सशर्त ब्रेकप्वाइंट, कॉल-स्टैक विंडो ढेर में
- (निष्पक्ष होने के लिए, Emacs + Slime के साथ मेरा कार्यकाल इस बारे में कुछ प्रदान करने के लिए लग रहा था, लेकिन मैं VS GUI द्वारा संचालित दृष्टिकोण के लिए आंशिक हूं)
मैं वास्तव में लिस्प के आसपास के प्रचार को पसंद करता हूं और मैंने इसे एक मौका दिया।
लेकिन क्या ऐसा कुछ है जो मैं लिस्प में कर सकता हूं जो मैं C # में भी नहीं कर सकता? यह C # में थोड़ा अधिक हो सकता है, लेकिन मेरे पास स्वतः पूर्ण है।
मुझे किसकी याद आ रही है? मुझे Clojure / CL का उपयोग क्यों करना चाहिए?
AND
या OR
फ़ंक्शन के रूप में। यह किया जा सकता है (दिया गया है LAMBDA
, जो कि एक मैक्रो भी है) लेकिन मुझे ऐसा करने का कोई स्पष्ट तरीका नहीं दिख रहा है जो पूरी तरह से चूसना नहीं होगा।