ऐतिहासिक उदाहरण मिसाल के लिए प्रोलॉग इम्पीरेटिव प्रोग्रामिंग में SQL से कम लोकप्रिय क्यों है? [बन्द है]


12

ऐसा लगता है कि डिक्लेरेटिव लिखना इम्पीरेटिव प्रोग्रामिंगSQL में बहुत लोकप्रिय है । हालाँकि, यह भी लगता है कि Declarative लिखने से बहुत जटिलता को बचाया जा सकता है लेकिन यह बहुत सामान्य नहीं है। Prolog

प्रोलॉग पर एसक्यूएल की इस स्पष्ट प्राथमिकता के लिए एक ऐतिहासिक मिसाल है?

यदि इसका कारण इंपीरियल भाषाओं द्वारा मूल समर्थन की कमी है , तो क्या यह उत्तर देना संभव है कि भाषा रचनाकारों ने इसे Prologपहली जगह में मूल रूप से समर्थन करने के लिए उपयोगी क्यों नहीं पाया ?


कुछ विशिष्ट उदाहरण प्रदान करने के लिए:

उदाहरण 1
ऋण आवेदन का मूल्यांकन कोड की कुछ पंक्तियाँ हो सकती हैं Prolog, जैसे कि SELECT/JOINप्रश्न में कोड की कुछ पंक्तियाँ हैं SQL, लेकिन ऐसा लगता है कि लाभ उतना स्पष्ट नहीं है SQL

उदाहरण 2
यहां एक और उदाहरण समस्या है और प्रोलॉग में समाधान। निम्नलिखित बाधा तर्क कार्यक्रम एक शिक्षक के रूप में जॉन के इतिहास के सरलीकृत डेटासेट का प्रतिनिधित्व करता है :

teaches(john, hardware, T) :- 1990  T, T < 1999.
teaches(john, software, T) :- 1999  T, T < 2005.
teaches(john, logic, T) :- 2005  T, T  2012.
rank(john, instructor, T) :- 1990  T, T < 2010.
rank(john, professor, T) :- 2010  T, T < 2014.

जब जॉन ने दोनों को तर्क सिखाया और प्रोफेसर थे, तो निम्न लक्ष्य खंड में यह पता लगाने के लिए डेटासेट पर सवाल उठाए गए :

:- teaches(john, logic, T), rank(john, professor, T).

परिणाम:

2010  T, T  2012.

उपरोक्त उदाहरण SQLमें समान परिणाम प्राप्त करना आसान होगा । लेकिन मान लीजिए आप एक में इस डेटा है Array। फिर उसी परिणाम का उपयोग करना उतना आसान नहीं है SQL। और एक सरणी में संग्रहीत डेटा के मामले में, मेरा मानना ​​है कि प्रोलॉग कोड को लिखना और बनाए रखना आसान होगा।


8
आप शेख़ी पहलू को डायल करना चाह सकते हैं।

4
अधिकांश पाठ उन लोगों के खिलाफ एक शेख़ी की तरह लगता है जो प्रोलॉग का उपयोग नहीं करते हैं। इसमें निहित एक सवाल पूछने लायक है, लेकिन अन्य सामान (शेख़ी) नीचे की ओर आकर्षित करता है और ऐसे लोगों को बंद कर देता है जो एक जवाब दे सकते हैं। दूसरे शब्दों में, मेरा सुझाव है कि आप और अधिक धर्मार्थ तरीके से अपने प्रश्न को पुन: प्रकाशित करने का प्रयास करें।

6
"उदाहरण के लिए, एक ऋण आवेदन का मूल्यांकन कोड की कुछ पंक्तियाँ हो सकती हैं" प्रोलॉग में "मैं इसे नहीं खरीदता, उसी कारण जैसे कि यह किसी भी मूल्य के नमक के लिए कस्टम-निर्मित या उत्पन्न SQL प्रश्नों के टन का उपयोग करेगा।
युफोरिक

7
हो सकता है कि मुझे कुछ याद आ रहा हो, लेकिन मुझे लगता है कि इसका जवाब 'लोग एसक्यूएल का उपयोग करते हैं क्योंकि डेटाबेस का समर्थन है'
ग्रैंडमास्टरबी

3
वे प्रोलॉग का उपयोग करते हैं ... अच्छी तरह से ... वास्तव में ... वे नियम इंजन का उपयोग करते हैं , जो कि "एक तदर्थ, अनौपचारिक रूप से निर्दिष्ट, बग-ग्रस्त, प्रोलॉग के आधे का धीमा कार्यान्वयन" है
जोर्ग डब्ल्यू मित्तग

जवाबों:


19

मेरा मानना ​​है कि यह मुख्य रूप से ऐतिहासिक चीज है।

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

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


2
"आम तौर पर कुछ कंपनियों को एक ऐसी तकनीक का विज्ञापन करने की आवश्यकता होती है, जो आम डेवलपर्स के बीच फैलने के लिए शिक्षा में पैदा हुई थी।": सच है। शिक्षा में बहुत सारे अच्छे विचारों को विकसित किया गया है और बाद में उन कंपनियों द्वारा लोकप्रिय बनाया गया है जिनके पास ऐसा करने के लिए विपणन शक्ति है। +1
जियोर्जियो

6

कारण वास्तव में बहुत सरल है। किसी भी कार्य के लिए भाषा कितनी उपयोगी है और कोड कितना रख-रखाव है, इससे कोई लेना-देना नहीं है।

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

आपने प्रोलॉग की कुछ पंक्तियाँ पढ़ीं और कई डेवलपर्स थोड़ी सी नज़रें गड़ाए हुए हैं और किसी और के लिए काम छोड़ देंगे, और संभवतः लेट हो जाएंगे। प्रोलॉग की विधेय वाक्य रचना केवल आसान पढ़ने के लिए उधार नहीं देती है।

अपडेट करें:

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


14
यह सच है कि SQL COBOL- ग्रेड अल्ट्रा-वर्बोज़ और "प्राकृतिक" सिंटैक्स के लिए गया था जो इसे पढ़ने के लिए "आसान" बनाता है। लेकिन मुझे बहुत संदेह है कि कोई व्यक्ति जो एसक्यूएल को नहीं जानता है, कुछ joinएस या count(*)उस जैसे कुछ के साथ एक मध्यम-जटिल बयान को ठीक से समझने में सक्षम होगा । यदि हम एसक्यूएल की मूल बातें समझते हैं, क्योंकि हमें कभी-कभी उस भाषा का उपयोग करना पड़ता है और इसलिए इन मूल बातों को सीखना पड़ता है। संबंधपरक डेटा स्टोरेज लॉजिक सिस्टम को हल करने की तुलना में बहुत अधिक सामान्य आवश्यकता है, इसलिए प्रोलॉग को सीखने के लिए कोई तुलनात्मक रूप से मजबूत आवश्यकता नहीं है।
आमोन

3
@amon यह एक अच्छा जवाब की शुरुआत की तरह लगता है :-)
svick

1
एसक्यूएल सीखने की बाधा को पठनीयता की वजह से कम किया जा सकता है, प्रोलॉग सिंटैक्स के कारण लोगों को रोक सकता है, मैं इससे पूरी तरह सहमत हूं। लेकिन वास्तव में, SQL समझ को जानने के बिना उपश्रेणियाँ और कुछ जोड़ इतने तुच्छ नहीं हैं। लेकिन सरल प्रश्नों के साथ शुरू करते समय कम अवरोध निश्चित रूप से एक कारण है कि लोग प्रोग्लॉग के बजाय एसक्यूएल का उपयोग करेंगे। :)
डायलन मीस

4
@JamesSnell क्षमा करें, लेकिन -1। आप जो दावा कर रहे हैं, वह किसी भी RegEx से मेल नहीं खाता है । ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
53777A

1
@JamesSnell RegEx क्रिप्टिक, लिखने, डिबग करने, बनाए रखने और संशोधित करने या विस्तार करने के लिए कठिन हैं, फिर भी वे बेहद लोकप्रिय हैं। यदि आप सही थे, तो RegEx को डेवलपर्स और भाषा निर्माताओं के बीच उनकी वर्तमान लोकप्रियता कभी नहीं मिलनी चाहिए थी।
53777A

4

एक और कारण है। व्यावहारिक रूप से, डिस्क पर बने डेटा के लिए SQL उपयोगी है। इसलिए डेटाबेस का उपयोग डेटा को "लंबे" समय (कई महीनों) के लिए संग्रहीत करने के लिए किया जाता है। हर SQL डेटाबेस (जैसे PostgreSQL, MySQL, Oracle, ....) डिस्क पर डेटा (या SSDs, यानी हार्डवेयर जो डेटा को रख सकता है अगर ठीक से संचालित हो)। हालाँकि, अधिकांश प्रोलॉग कार्यान्वयन मुझे पता है कि वे मेमोरी में काम कर रहे हैं, और डेटा को मज़बूती से रखने के लिए उपयोग नहीं किया जा सकता है (पावर आउटेज के बाद लगातार डेटा, कम से कम एक प्रोग्राम्ड)। और SQL कार्यान्वयन डेटा के टेराबाइट्स से निपट सकते हैं ...।

बेशक, एक DBMS डिस्क (लेकिन बाद में) को तुरंत नहीं लिखता है। लेकिन प्रोलोग दुभाषियों के बारे में मैंने कभी नहीं लिखा (स्पष्ट रूप से) उनके तथ्य और नियम आधारों को डिस्क के लिए जारी रखने के लिए।

(कुछ भाषा कार्यान्वयन में दृढ़ता क्षमता होती है, उदाहरण के लिए SBCL के साथ save-lisp-and-die... लेकिन मुझे पता है कि कोई Prolog ऐसा नहीं कर रहा है)।

व्यावहारिक रूप से, SQL डेटाबेस-ऑन डिस्क- के लिए है, लेकिन प्रोलॉग एक प्रोग्रामिंग भाषा है (टेक्स्ट फ़ाइलों में स्रोत कोड के लिए)।


1
मुझे ऐसा नहीं लगता है, क्योंकि कोई भी SQL डेटाबेस डिस्क I / O के साथ कड़ाई से काम नहीं करता है, क्योंकि यह बहुत अक्षम होगा (हर समय कुछ मेमोरी में डेटा होता है), और डिस्क पर प्रोलॉग बाधाओं को क्रमबद्ध करने के लिए कोई तकनीकी बाधा नहीं है कि मैं इस समय सोच सकते हैं।
मूढ़

3
सैद्धांतिक रूप से, SQL एक क्वेरी भाषा है और इस बात की परवाह नहीं करता है कि डेटा कैसे संग्रहीत किया जाता है, जब तक कि डेटा एक रिलेशनल मॉडल द्वारा वर्णित नहीं किया जाता है। SQL सिर्फ एक इंटरफ़ेस है, प्रतिमान नहीं। SQL- उपयोग करने वाले डेटाबेस हैं जो विशुद्ध रूप से या आंशिक रूप से गैर-स्थिर मेमोरी में काम करते हैं। यह एसक्यूएल का उपयोग करने वाले डेटाबेस के लिए प्रोलॉग तथ्यों के रूप में डेटा स्टोर करना भी संभव होगा! [उद्धरण वांछित] आखिरकार, तथ्य केवल संबंधों का वर्णन करते हैं। इसके विपरीत, प्रोग्लोग इंजन के लिए यह संभव होगा कि मेमोरी को सब कुछ लोड करने के बजाय डिस्क पर डेटाबेस जैसे फैशन में तथ्यों को संग्रहीत किया जाए।
आमोन

1
सैद्धांतिक रूप से हाँ, लेकिन व्यावहारिक रूप से एसक्यूएल डिस्क पर भंडारण कर रहा है, और यह अक्सर आवश्यक होता है
बेसिल स्ट्रायनेविच

1
@BasileStarynkevitch नियम और तथ्य स्रोत कोड पर लिखे गए हैं जो डिस्क पर बने रहते हैं। इसके बजाय आप उन्हें डेटाबेस पर क्यों संग्रहीत करेंगे? Prolog का क्या मतलब है आप डेटा नहीं रख सकते हैं? यह ऐसा नहीं माना जाता है। इसलिए डेटाबेस मौजूद हैं। क्या आप और अधिक विस्तृत कर सकते हैं।
53777A

1
वास्तव में, SQL डेटाबेस के लिए है, और Prolog एक प्रोग्रामिंग भाषा है। वह मेरी बात है।
बेसिल स्टारीनेवविच

1

अभी तक उल्लेखित एक पहलू 1980 और 1990 के दशक में "ओपन" सिस्टम के लिए धक्का नहीं है। कई स्थानों पर, सॉफ़्टवेयर विक्रेताओं को अपने डेटाबेस में डेटा को उद्योग मानक पहुंच प्रदान करना होगा। उस समय, SQL एक स्थापित मानक था जो अच्छी तरह से जानता और समझा जाता था; प्रोलॉग बहुत गूढ़ और अकादमिक था। एक बार जब आप आसानी से सिस्टम को जोड़ने के लिए ODBC जैसे इंटरफेस प्राप्त करना शुरू कर देते हैं, तो कोई भी अन्य तकनीकों को देखने में रुचि नहीं रखता है।

मैंने 80 के दशक के उत्तरार्ध में एक जगह पर काम किया, जिसमें एक काफी सफल ISAM डेटाबेस था जिसे SQL इंटरफ़ेस को जोड़ने के लिए बाजार के दबाव / खरीद नियमों द्वारा मजबूर किया गया था।

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