2008-09-24 11 views
11

कृपया से एक पर प्रतिक्रिया दें।लिस्प के बारे में आपकी पसंदीदा गलतफहमी क्या है?

यदि आप समझाते हैं कि यह सत्य क्यों नहीं है तो सामान्य विवरणों से बचने और विशेष उदाहरण प्रदान करने का प्रयास करें।

उत्तर

-5

कोई भी पर्याप्त उन्नत अनुप्रयोग लाइन शोर से अलग नहीं है।

+0

यह अधिक perl है। – TraumaPony

+0

यह उद्धरण कैसे चला गया? पर्ल - एकमात्र भाषा जो आरएसए एन्क्रिप्शन के पहले और बाद में समान दिखती है :-) मुझे व्यक्तिगत रूप से यह अच्छा लगता है (perl, lisp नहीं) - ब्रैकेट मुझे परेशान करते हैं, दूसरी तरफ :-) – Rook

4

"यूनिवर्स लिस्प में लिखा गया है"। लेकिन apparently it's not

+2

लेकिन यह है! http://www.gnu.org/fun/jokes/eternal-flame.ogg :) –

13

इसके लिए आर्टिफिशियल इंटेलिजेंस

+1

यह वास्तव में मुझे परेशान करता है! –

+1

हाँ, यह पहला जवाब है जब मैं आमतौर पर लिस्प का उल्लेख करता हूं। वह, और लिखित संचार में LISP। ;) – skypher

+3

@Luis - इंटेलिजेंस आपको परेशान करता है? ;-) – Rook

-2

पीपुल्स कि कोष्ठक के लिए तुतलाना दोषी ठहराते हैं। मैं उन्हें यह कहना चाहूंगा कि वे उनके बिना सूची-सरणी उन्मुख भाषा को कैसे कार्यान्वित करेंगे ...

+1

आसान! एम-एक्सप्रेशन का उपयोग करें। ;) – TraumaPony

+0

लिस्प वास्तव में सूची उन्मुख नहीं है। यह विपक्षी कोशिकाओं से निर्मित एकमात्र लिंक वाली सूची डेटा संरचना होती है, इसका उपयोग प्रोग्राम कोड (एक पेड़) का प्रतिनिधित्व करने के लिए किया जाता है, जिसका वाक्यविन्यास सबसे स्वाभाविक रूप से घोंसला वाले कोष्ठक है। सूचियां और विपक्षी कोशिकाएं लिस्प के लिए मौलिक नहीं हैं - एक पूर्णकालिक लिस्पर –

20

लिस्प एक व्याख्या की गई भाषा है और इस प्रकार यह वास्तव में धीमी है।

सामान्य लिस्प हाइपर स्पेक में disassemble फ़ंक्शन को देखें।

SBCL नामक एक आम लिस्प कार्यान्वयन कई प्लेटफार्मों के लिए एक कुशल देशी संकलक बैकएंड के साथ आता है।

+4

यह केवल एसबीसीएल नहीं है। किसी भी सभ्य आम लिस्प या योजना कार्यान्वयन आजकल देशी कोड या कुशल बाइटकोड संकलक प्रदान करते हैं। –

+0

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

6

मेरे पास "पसंदीदा" गलत धारणा नहीं है, क्योंकि अधिकांश गलतफहमी, और न केवल लिस्प के बारे में, केवल परेशानियां हैं। लेकिन मेरे पास लिस्प के बारे में एक गलतफहमी है जो वास्तव में मुझे आश्चर्यचकित करता है जब मैंने लिस्प के इतिहास को पढ़ा (विशेष रूप से History of Lisp और The Evolution of Lisp)।

लिस्प एक धीमी गति से व्याख्या की भाषा मेरी कई लोगों को माना जाता है, लेकिन वास्तविकता में यह अपनी पहली काम कर दुभाषिया होने के बाद एक वर्ष से कम के बारे में एक संकलक कुछ था, मुझे लगता है, और निम्नलिखित इतिहास एक लंबी सूची है ऑप्टिमाइज़ेशन पर लक्षित कार्य का परिणाम जिसके परिणामस्वरूप कुछ लिस्प कार्यान्वयन फोरट्रान को क्रश करने पर संख्या में हराया!

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

20

मेरी पसंदीदा गलत धारणा: यह एक "कार्यात्मक भाषा" है जो पुनरावृत्ति या ओओपी को हतोत्साहित करती है या जो भी प्रोग्रामिंग शैली आप नाम दे सकते हैं।

सत्य से कहीं भी कुछ भी नहीं हो सकता है।

सबसे पहले, स्पीकर द्वारा किए गए अर्थ के आधार पर, "लिस्प", वास्तव में एक भाषा परिवार नहीं बल्कि भाषा है। इस परिवार के कुछ कम या कम प्रसिद्ध और व्यापक सदस्य हैं: Scheme, Common Lisp, Emacs-Lisp, और AutoLisp परंपरागत हैं; आजकल, Nu, newLISP (जो वास्तव में एक आधुनिक की तुलना में "oldLISP" की तरह अधिक है, लेकिन वैसे भी), Arc, और Clojure भी हैं।

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

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

लिस्प मुझे वास्तव में भाषा परिवार होने लगता है जो अधिकतर नए दिशाओं में प्रयोगों को प्रोत्साहित करता है और प्रोग्रामिंग प्रतिमानों को आसानी से शामिल करता है जो कि जाने-माने से समर्थित नहीं हैं। इसमें अनिवार्य प्रोग्रामिंग शामिल है। आम लिस्प को भी मिल गया है!

+4

एक ऐसी भाषा को ध्वजांकित करना जिसमें विवादास्पद लूप मैक्रो शामिल है, पुनरावृत्ति को निराश करने के रूप में स्पष्ट रूप से बहुत अज्ञानता लेती है। जितना कम वे जानते हैं, उतना ही वे न्याय करते हैं ... –

8

मेरी पसंदीदा लिस्प गलत धारणा: सीएल वास्तव में काथूहू का मतलब है!

चुटकुले एक तरफ; सभी प्रकार की लिस्पी बोलीभाषाओं के बारे में अब तक की सबसे बड़ी गलत धारणा है, यह है कि को संश्लेषण पर एस-एक्सप्रेशन सिंटैक्स निर्भरता पठनीयता को नुकसान पहुंचाती है, वास्तव में यह बहुत ही विशेषता है कि मदद करता है ताकि लिस्प कोड बहुत अधिक स्पष्ट हो सके और अन्य प्रोग्रामिंग भाषाओं की बहुमत की तुलना में पठनीय।

+1

मुझे लगता है कि इस बिंदु को बनाने की ज़रूरत है कि वास्तव में, जब आप पहली बार भाषा का सामना करते हैं तो सभी माता-पिता कोड को पढ़ने के लिए कठिन बनाते हैं। मैं इसे व्यावहारिक रूप से एक असंगत तथ्य मानता हूं। – shsteimer

+1

मुझे लगता है कि अनोखा इंडेंटेशन शैली एक मुद्दा है। – Jegschemesch

3

लिस्प स्टैंडअलोन निष्पादन योग्य प्रदान नहीं कर सकता है।

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

+0

इसमें इसकी कमी है: http://pupeno.com/blog/the-problem-with-lisp – Pablo

+0

@ लेवेन्ट - हाँ, लेकिन क्या यह "स्टैंडअलोन" है? आम तौर पर, उस अवधि के तहत मेरा मतलब स्थिर जुड़ा हुआ है, जो किसी और चीज पर निर्भर नहीं है। – Rook

3

लिस्प के पास कोई आईडीई नहीं है, इसलिए आपको नोटपैड का उपयोग करना होगा और लगातार सभी आवश्यक ब्रांड्स को गिनना होगा।

वास्तव में, कुछ हैं। सामान्य लिस्प के लिए, विंडोज़ और लिनक्स के तहत SLIME के साथ Emacs का उपयोग करना सबसे अच्छा है। यह एक श्रोता (मूल्यांकन करने के लिए), एक इंस्पेक्टर (परिणाम देखने के लिए), एक डीबगर (स्टेपिंग के साथ), एक अत्यधिक अनुकूलन संपादक (यह सब के बाद Emacs) प्रदान करता है। एसएलआईएमई 10 अलग-अलग कार्यान्वयन का समर्थन करता है।

+0

आप ओएसएक्स के तहत एसएलईएमई का भी उपयोग कर सकते हैं। – inglesp

+0

यदि आप क्लोजर का उपयोग कर क्लोजर का उपयोग कर क्लोजर का उपयोग कर रहे हैं, तो आप NetBeans का भी उपयोग कर सकते हैं, या यदि आप कप प्लग का उपयोग करके सामान्य लिस्प का उपयोग कर रहे हैं तो आप एक्लिप्स का उपयोग कर सकते हैं। – Pablo

+0

मैं इसे 'आधा बिंदु' - emacs एसएलईएमई अच्छा है, और सब कुछ, लेकिन यह * एक पूर्ण उड़ा आईडीई नहीं है। तो, चलो बीच में बसें, और इसे 'आधे बिंदु' दें :-) – Rook

11

मुझे पसंदीदा गलत धारणा होने के बारे में पता नहीं है ... लेकिन एक मैं अक्सर देखता हूं कि प्रोग्रामर "LISP" के बारे में बात करते हैं और उन्हें यह क्यों पसंद नहीं है/यह अनुचित/यह अकादमिक है/यह कभी काम नहीं करेगा प्रोजेक्ट एक्स। जो ठीक है, सिवाय इसके कि जब वे "एलआईएसपी" कहते हैं तो उनका मतलब "योजना" है जिसका अर्थ है कि वे वास्तव में "योजना का एक उप-समूह" है जिसका अर्थ है कि उनका वास्तव में "एआई या भाषा पाठ्यक्रम 5 से योजना का आधा याद किया गया है साल पहले कि उन्हें पसंद नहीं आया "।

इस दिशा से लिस्प के खिलाफ तर्कहीन पूर्वाग्रह का थोड़ा सा प्रतीत होता है। तर्कसंगत पूर्वाग्रह पूरी तरह से कुछ और हैं।

27

कि सभी कोष्ठक कोड को पढ़ने योग्य नहीं बनाते हैं। लगभग दो सप्ताह बाद, और एक सभ्य पाठ संपादक के साथ, आप बस उन्हें ध्यान में रखना बंद कर देते हैं।

[ईटीए - बस लंबे समय तक लिस्पर केनी टिलटन द्वारा उद्धरण मिला: "पेंटिचेस? क्या ब्रांड्स? मैंने लिस्प प्रोग्रामिंग के अपने पहले महीने के बाद से किसी भी कोष्ठक को नहीं देखा है। मुझे उन लोगों से पूछना पसंद है जो ब्रांड्स के बारे में शिकायत करते हैं लिस्प अगर वे अख़बार में शब्दों के बीच सभी जगहों से परेशान हैं ... "]

4

लिस्प में सब कुछ एक सूची है, कोई अन्य जटिल जटिल डेटा संरचनाएं नहीं हैं।

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

11

कई लोग सोचते हैं कि लिस्प सूची-उन्मुख भाषा (जो भी इसका मतलब है) है।

यह लिस्पर्स के बीच भी एक व्यापक धारणा है, कि लिस्प के बारे में एक महान और सबसे महत्वपूर्ण बात विपक्षी कोशिका है और अकेले लिंक्ड सूचियां हैं जो कोई भी उनका उपयोग कर सकती है (sexp's)। जो लोग मानते हैं कि उन अन्य कारणों को समझ नहीं पाते हैं जो अन्य मुख्यधारा की भाषाओं की तुलना में अधिक उत्पादक भाषा को लुप्त करते हैं (यह केवल मेरी व्यक्तिगत राय है!), और यह समझ में नहीं आता कि लिस्प काफी कुछ नहीं हो सकता है खेल में विपक्षी सेल बिल्कुल।

चीजें हैं जो कि यह क्या है तुतलाना बनाने के लिए महत्वपूर्ण हैं, और कि sexp के बिना आसानी से संभव हैं की एक यादृच्छिक चयन: क्रम

  • dynamic typing
  • पर उपलब्ध

    • REPL
    • संकलक सिंटेक्टिक abstractions (मैक्रोज़)
    • closures
    • सरल वाक्य रचना है जो आसान है संपादित करने के लिए (और मस्तिष्क द्वारा "पार्स करने के लिए")

    में कुछ स्पष्टीकरण:

    सीधे शब्दों में

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

    शायद कई लोग तर्क देंगे कि लेंस मैक्रो सिस्टम के लिए विपक्ष सेल और सेक्सप महत्वपूर्ण हैं। महत्वपूर्ण बात एक सरल वाक्यविन्यास है और डेटा संरचना में हेरफेर करने के लिए एक सरल है जिसमें इसे पार्स किया गया है। sexp वाक्यविन्यास और सूचियां एक अच्छे उम्मीदवार हैं, लेकिन कई अन्य हैं।

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

  • +0

    मैं सहमत हूं। असल में मुझे लगता है कि सबसे अच्छा समाधान की तुलना में विपक्षी कोशिकाएं एक ऐतिहासिक घटना है (औपचारिक न्यूनतम परिभाषा के लिए ठीक है, और आईबीएम 704 हार्डवेयर के लिए अच्छी तरह से नक्शा करने के लिए हुआ)। उदाहरण के लिए सीडीआर कोडिंग या अनलॉक लिंक्ड सूचियों की चालें जिन्हें बाद में स्मृति को बचाने के लिए लागू किया गया था पर विचार करें। वास्तव में – 6502

    2

    यह एक प्रोग्रामिंग भाषा है। आज लिस्प Common Lisp और Scheme सहित प्रोग्रामिंग भाषाओं का एक परिवार है, जो विभिन्न कार्यान्वयन के साथ मानक हैं, और Clojure, Arc और many others

    +0

    । जब लोग "आम लिस्प" का मतलब करते हैं तो लोग "लिस्प" कहते हैं जब मैं नापसंद करता हूं। –

    +0

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

    +0

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

    1

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

    आज कॉलेजों और विश्वविद्यालयों में सीएस शिक्षकों (विशेष रूप से युवाओं) को जावा, सी और सी ++ का उपयोग करके शिक्षित किया गया था, और संभवतः उन्होंने "प्रोग्रामिंग भाषा के तुलनात्मक अध्ययन" या "प्रोग्रामिंग प्रतिमान" नामक पाठ्यक्रम में योजना या सामान्य लिस्प को सीखा ", जिसे शायद किसी ऐसे व्यक्ति द्वारा सिखाया जाता था जो किसी भी लिस्प भाषा को पसंद नहीं करता है, और उन्हें कार्यों, सूचियों, प्रतीकों और उच्च-आदेश कार्यों के बारे में सिखाया जाता है। अवधि। तब वे अंत शिक्षण उन्होंने क्या सीखा:

    • लिस्प है एक प्रोग्रामिंग भाषा
    • लिस्प व्याख्या की है
    • लिस्प धीमी
    • लिस्प एक ऐ भाषा (पिछली बार मैं रॉबर्ट जाँच की है सेबेस्टा की किताब, उसने अभी भी दावा किया है कि - लेकिन एक नया संस्करण है, इसलिए उसने इसे ठीक कर दिया होगा)
    • लिस्प के पास कोई ओओ समर्थन नहीं है (!!!)
    • लिस्प unctional भाषा
    • लिस्प में कोई डेटा प्रकार
    • लिस्प सूचियों को छोड़कर कोई डेटा संरचनाओं है देखते हैं (जैसा कि किसी भी अन्य प्रतिमान समर्थन न्यूनतम के खिलाफ)
    • "लिस्प इस्तेमाल नहीं किया है (और इसलिए क्रंचिंग नंबर के लिए उपयोगी नहीं है) अब, और केवल इस कोर्स में प्रयोग किया जाता है, क्योंकि यह सबसे महत्वपूर्ण कार्यात्मक भाषा "

    मैं भी कॉमन लिस्प में मैट्रिक्स गुणन का एक उदाहरण दे रही है एक बहुत ही बुद्धिमान प्रोफेसर देखा है - सूची के रूप में मैट्रिक्स का प्रतिनिधित्व करने, निश्चित रूप से !

    +0

    मूर्ख प्रश्न समय: LISP में matrices का प्रतिनिधित्व करने के लिए 'सही' तरीका क्या है? –

    +0

    ठीक है, इसका इतना उपयोग नहीं किया जाता है, आपको यह स्वीकार करना होगा! मैंने कुछ समय पहले एक प्रश्न पूछा था (आप इसे मेरे प्रोफाइल का उपयोग करके पा सकते हैं) आज एलआईएसपी कहां उपयोग किया जाता है, और ऑटोकाड और एमाक्स के अलावा, और कुछ अन्य मामूली समाधानों के अलावा, वास्तव में बहुत से जवाब नहीं थे। हालांकि, मुझे गलत साबित होना अच्छा लगेगा। – Rook

    +0

    matrices के बारे में: वे मूल देशी लिस्प प्रकार हैं। एक मैट्रिक्स शाब्दिक के लिए, बस एक सूची पर एक # साइन प्रस्तुत करें: # (1 2 3) एक 1 डी सरल-वेक्टर है; # 2 ए ((0 0) (0 0)) एक 2 डी-सरणी है। आप सरणी समारोह के साथ सरणियों बना सकते हैं और आरिफ मैक्रो के साथ उन तक पहुँच: (क (मेकअप सरणी setf '(2 2): घटक-प्रकार के' डबल फ्लोट)) (setf (एएफएफ 0 0) 0.5 डी 0) ;; एक [0,1] से 0.5 (पीप्रिंट (1 एफ 1 एफ़)) वास्तव में, यह कोड उत्पन्न करेगा जो गति से सी के साथ प्रतिस्पर्धा करेगा। – Jay

    1

    क्योंकि लोग लिस्प का उपयोग करके कठोर समस्याओं का सामना करते हैं, इसलिए भाषा स्वयं ही मुश्किल होनी चाहिए।

    Recursion is hardFixed points of functions are hard। लेकिन वे मुश्किल से Structure and Interpretation of Computer Programs के अध्याय 1 को कवर करते हैं। ऐसा इसलिए नहीं है क्योंकि योजना कठिन है - यह वास्तव में है क्योंकि यह इतना आसान है, कठिन चीजें सब कुछ करने के लिए बाकी है!

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