लिस्प के बारे में क्या बहुत अच्छा है? [बन्द है]


104

मुझे यह कहने के लिए पर्याप्त लिस्प नहीं पता है कि यह अच्छा है या बुरा। ऐसा लगता है कि हर कोई जिसने लिस्प का इस्तेमाल किया है वह इसे प्यार करता है, फिर भी इन दिनों सबसे लोकप्रिय भाषा सी से उतारी जाती है।

तो यह लिस्प के बारे में क्या है जो इतना महान है और इसका उपयोग अधिक क्यों नहीं किया जाता है? क्या लिस्प के बारे में कुछ भी बुरा है (कोष्ठक की लगातार राशि के अलावा)?


5
"इन दिनों अधिकांश लोकप्रिय भाषाएँ C से ही उतरी हैं" केवल सतही तौर पर। यदि आप केवल घुंघराले ब्रेसिज़ के उपयोग के बजाय सुविधाओं को देखते हैं, तो आप पाएंगे कि आधुनिक भाषाएं लिस्प से बहुत दूर नहीं हैं, और हर समय करीब हो रही हैं। सी # या पायथन या रूबी में एक कार्यक्रम, कहते हैं, लिस्प की तुलना में बहुत अधिक दिखाई देगा, जैसे सी।
केन

11
किसी भाषा का एक अच्छा उदाहरण जो C की तरह दिखता है, लेकिन Lisp की तरह कार्य करता है, जावास्क्रिप्ट है। इसका बहुत सा डिज़ाइन स्कीम जैसा है।
JAL

अच्छी बात है, केन: सुविधाओं की बढ़ती संख्या जो लिस्प (प्रथम श्रेणी के कार्य, डेटा के रूप में कार्य करता है, यहां तक ​​कि मैक्रोज़) के लिए अद्वितीय है जो अन्य भाषाओं में आ रही हैं। और प्रतिक्रिया एक तरफा नहीं है: लिस्प अन्य भाषाओं की मान्यता में नई तकनीकों और मुहावरों को विकसित कर रहा है (जैसे ऑब्जेक्ट-उन्मुख प्रतिमान की सफलता के जवाब में CLOS)।
itowlson 6

6
लिस्प ने सभी से विचारों को लिया है, लेकिन क्या जवाब में CLOS? CLOS (1986-1987) काफी हद तक लिस्प, उदाहरण के लिए, लिस्प मशीन लिस्प (1980) फ्लेवर के लिए पहले की वस्तु प्रणालियों का मानकीकरण था। मुझे नहीं लगता कि "ओओ प्रतिमान की सफलता" 1980 में अभी तक स्पष्ट थी: "सी विद क्लासेस" केवल एक वर्ष का था (और अभी भी 3 साल दूर "सी ++" नाम दिया जा रहा है), और मुझे नहीं पता सिमूला -67 कभी बहुत लोकप्रिय था। लिस्प में अन्य उन्नत सुविधाओं का एक समूह है जो आज लोकप्रिय भाषाओं में नहीं है; ऊ सफल होने के लिए होता है, लेकिन लिस्प को यह नहीं मिला क्योंकि (या जब) यह लोकप्रिय था।
केन

मुझे नहीं लगता कि हर कोई जो लिस्प का इस्तेमाल करता है वह इसे प्यार करता है। मेरा अनुभव अलग है। कंप्यूटर विज्ञान के उन छात्रों से पूछने की कोशिश करें, जिन्होंने स्कीम से शुरुआत की थी। संभवतः लगभग 10% इसे पसंद करेंगे, 30% इसे सम्मान देंगे और 60% इसे नफरत करेंगे। मुझे यह भी नहीं लगता कि ज्यादातर लोकप्रिय भाषाएं सी
रेनर जोसविग

जवाबों:


58

लिस्प प्रोग्रामिंग भाषाओं की चक नॉरिस है।

लिस्प वह बार है जिसके खिलाफ अन्य भाषाओं को मापा जाता है।

लिस्प को जानना डेवलपर ज्ञानवर्धन को प्रदर्शित करता है।

मैंने 3 कमजोरियों के बारे में सुना है (और उनके प्रतिवाद):

  1. गतिशील टाइपिंग।

    संकलित भाषाओं के लिए एक तर्क है कि संकलक को त्रुटियों के एक निश्चित वर्ग को पकड़ने के लिए पर्याप्त जानकारी देने के लिए घूमते हुए, ताकि वे रनटाइम पर न हों। लेकिन आपको अभी भी परीक्षण करने की आवश्यकता है।

    यह लेख अधिक परीक्षण के साथ-साथ गतिशील टाइपिंग के लिए तर्क देता है: मजबूत टाइपिंग बनाम मजबूत परीक्षण

  2. मुश्किल से उठा।

    वास्तव में इसके दो भाग हैं: शिक्षण और उपकरण।

    लिस्प वास्तव में "पाने" के लिए कुछ प्रयास करता है, लेकिन यह इसके लायक है, क्योंकि लिस्प वास्तव में सीखना आपको अन्य भाषाओं में बेहतर प्रोग्रामर बना देगा। उदाहरण के लिए, एक बार जब आप वास्तव में "बंद" हो जाते हैं, तो आप जावा की आंतरिक कक्षाओं को समझेंगे। और एक बार जब आप "प्रथम श्रेणी" कार्य करते हैं, तो आप हर बार जब आप उनके बिना एक भाषा का उपयोग करते हैं, तो आप उदास हो जाएंगे।

    मैंने द लिटिल शेमर को पढ़ा है और प्रैक्टिकल कॉमन लिस्प पढ़ रहा हूं , जो दोनों उत्कृष्ट हैं।

    इसके बाद उपकरण हैं। मैं एक मैक पर हूँ, इसलिए मैंने एक्वामाक्स एमएसीएस (एक नौसिखिए के लिए एमएसीएस को जीवंत बनाता है) और स्टील बैंक कॉमन लिस्प ( एसबीसीएल) में शून्य किया है

  3. पुस्तकालयों का अभाव।

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


4
(3) को संबोधित करने के लिए - क्या आपने क्लोजर को देखा है?
vssit

5
"लेकिन वास्तव में मैं लिस्पर्स को पुस्तकालयों की कमी के बारे में शिकायत करते नहीं देखता (हो सकता है क्योंकि लिस्प इतना शक्तिशाली है कि उन्हें बस जरूरत नहीं है!)।" मैं अंतिम कथन को सही करूंगा "(हो सकता है क्योंकि लिस्प इतना शक्तिशाली है कि उन्हें केवल THEM के लिए आवश्यक नहीं है?)" इससे बहुत अंतर पड़ता है।
अग्निस वसीलियास्कस

50
एक बात नहीं कहती कि लिस्प महान क्यों है, मुझसे नीचा है।
Kilon

30
डाउनवोटेड क्योंकि "एक्स कमाल है! एक्स महान है! एक्स वाई की तरह है, जो भी महान है क्योंकि मैं कहता हूं कि यह बहुत अच्छा है!" "X को महान क्यों माना जाता है?" का उत्तर नहीं है। राजनीतिक संदर्भ भी अनुचित और अनपेक्षित है (ज्यादातर लोग यह भी नहीं सोचते कि स्वतंत्रतावाद एक अच्छा विचार है)। तीन बिंदु सहायक हैं, लेकिन मेरी इच्छा है कि वे "यह कमजोरी ए नहीं है ... लेकिन यह वास्तव में कमजोरी भी नहीं है!"।
शानदार

1
लिस्प प्रोग्रामिंग भाषाओं की चक नॉरिस है। तो यह वही है जो इसे इतना अच्छा बनाता है। समझ गया। Downvoted।
नीक न्यूमैन

71

"लिस्प एक प्रोग्रामेबल प्रोग्रामिंग लैंग्वेज है।"
- जॉन फोडारो, सीएसीएम, सितंबर 1991

यहाँ मेरा विचार है:

सतह पर, लिस्प एक अच्छी, सरल कार्यात्मक प्रोग्रामिंग भाषा है। लगभग कोई सिंटैक्स नहीं है, और सभी टुकड़े तार्किक तरीकों से एक साथ फिट होते हैं।

यदि आप थोड़ा गहरा खोदते हैं , SICP पढ़ते हैं , और एक मेटासेकुलर मूल्यांकनकर्ता लिखते हैं, तो आपको दो चीजें पता चलती हैं: एक, संपूर्ण दुभाषिया (बस कुछ आदिम दिए गए) बस कोड का एक पृष्ठ है, और दो, कोड और डेटा के संबंध सुरुचिपूर्ण प्रोग्रामिंग तकनीकों के लिए अनुमति देता है।

एक बार जब आप इसे पूरी तरह से अवशोषित कर लेते हैं, तो यह महसूस होता है कि अन्य भाषाएं पत्थर में सेट हैं जब वे केवल आपको कुछ चीजें कहने की अनुमति देते हैं। यदि आप इसके लिए वाक्य रचना और शब्दार्थ को परिभाषित कर सकते हैं तो लिस्प किसी भी अमूर्तता का निर्माण कर सकती है।


1
आप सिद्धांत में किसी भी भाषा को जैसे Rust, Ruby, C, Java, Python, Erlang में एम्बेड कर सकते हैं। तो पायथन (Hy) और रस्ट के एस-एक्सप्रेशन संस्करण को (रिस्प) कहा जाता है [हालांकि मुझे नहीं पता कि ये कितने स्थिर हैं]। यदि आप Python के बजाय Hy में कोड लिखते हैं तो आपके पास मैक्रोज़ और संरचनात्मक संपादन जैसे parinfer / paredit ( shaunlebron.github.io/parinfer ) की क्षमता है । मैक्रोज़ आपको लिस्प में अपने स्वयं के डीएसएल को एम्बेड करने की अनुमति देते हैं, और उन्हें कंपाइलर मैक्रोज़ के माध्यम से धीमी कोड को फास्ट कोड में बदलने के लिए भी इस्तेमाल किया जा सकता है। आप सेक्स ट्री को बदलकर पाइथन (Hy) कोड को रस्ट (Risp) में बदल सकते हैं।
anoeu256

मैंने कई बार यह कहावत भी सुनी है। क्या आप थोड़ा और अधिक @ aoeu256 मिटा देंगे?
छात्र

66

लिस्प अच्छा है क्योंकि इसमें बहुत कम, सरल, नियमित वाक्यविन्यास है।

लिस्प खराब है, क्योंकि इसमें बहुत कम, सरल, नियमित वाक्यविन्यास है।


4
न्यूनतम, सरल, नियमित वाक्यविन्यास के बारे में क्या बुरा है?
ओस्कर्कव

27
@oskarkv - पूरी तरह से नियमित न्यूनतम वाक्यविन्यास का मतलब है कि किसी विशेष उपयोग के लिए कोई पूर्वाग्रह नहीं है। यह अच्छा लगता है, जब तक कि आप पेरेटो सिद्धांत का सामना नहीं करते हैं: यह सबसे अधिक होने वाले मामलों के प्रति पक्षपाती होने के लिए अधिक कुशल है, और यह दिखावा करना बंद कर दें कि सभी मामले समान रूप से होने की संभावना है। यदि आपके 20% ग्राहक NYC में हैं और LA में 80% हैं, तो क्या यह कंसास / ओक्लाहोमा सीमा पर कहीं बाड़ पर बैठने का मतलब है, ताकि भौगोलिक दृष्टि से "निष्पक्ष" बने रहें? या अधिक समझदारी कहाँ जाने के लिए ज्यादातर ग्राहक हैं? हम उन भाषाओं को पसंद करते हैं जो संभावित समस्याओं की ओर अपनी विशेषताओं को तिरछा करती हैं।
डैनियल इयरविकर

4
लिस्प सिंटैक्स वास्तव में अच्छा है। मैंने क्लोजर के बाद हास्केल सीखा, लेकिन तब तक हास्केल का वाक्य विन्यास भी बाधा की तरह महसूस हुआ। लिस्प के सनटैक्स की एकरूपता महान है। इसलिए, मैं बिल्कुल नहीं जानता कि आप किस पक्षपात की बात कर रहे हैं। अनम्यता के प्रति पूर्वाग्रह? बुरा प्रतीत होता है।
ऑसकर्व

3
जब आप इसे लगाते हैं तो यह बुरा लगता है। मैंने इसे इस तरह नहीं रखा! कैसे सबसे आम घटनाओं की ओर पूर्वाग्रह, सबसे अधिक संभावना स्थितियों के बारे में? ये (निश्चित रूप से) सापेक्ष शब्द हैं, इसलिए यह निर्भर करता है कि आप क्या कर रहे हैं। यदि आप वास्तव में आपके पास क्या कर रहे हैं, इसके बारे में कोई जानकारी नहीं है, तो तैयारी करने का कोई मतलब नहीं है। लेकिन यह शायद सच नहीं है - आपके पास जानकारी है, और इसलिए आप खुद को ("पूर्वाग्रह") तैयार कर सकते हैं सबसे संभावित परिस्थितियों के लिए जिन्हें आपको तैयार होने की आवश्यकता है।
डैनियल ईयरविकर

22

"किसी भी पर्याप्त रूप से जटिल सी या फोरट्रान कार्यक्रम में एक अनौपचारिक रूप से निर्दिष्ट, अनौपचारिक रूप से निर्दिष्ट, बग-सवार, सामान्य लिस्प के आधे भाग का धीमा कार्यान्वयन होता है।"

ग्रीनस्पून का दसवां नियम


16

यहाँ कुछ उपयोगी लिंक दिए गए हैं:


1
लिस्प महान है (मैं आधे रास्ते से गुजर रहा हूं, हालांकि मैं मानता हूं कि मैक्रों थोड़े घने हो रहे हैं); लेकिन आपको इसे पढ़ने के लिए लिस्प को जानने की आवश्यकता है। इस छोटी सी समस्या के अलावा यह केवल लिस्प के बारे में नहीं, बल्कि सामान्य रूप से सॉफ्टवेयर इंजीनियरिंग के बारे में एक महान पुस्तक है।
जेएस

9

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


3

एक लिस्प प्रोग्राम आपके विचारों के बीच एक बहुत स्पष्ट मानचित्रण प्रदान करता है कि प्रोग्राम कैसे काम करता है और कोड जो आप वास्तव में लिखते हैं।

स्रोत: http://www.gigamonkeys.com/book/introduction-why-lisp.html

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