पहले लूप निर्माण का विचार किसने बनाया था?


53
while (1) {
      if (1+1==2) {
             print "Yes, you paid attention in Preschool!";
      } else {
             print "Wait... I thought 1+1=2";
      }
 }

एक डेवलपर के रूप में, हम सभी को बहुत बार लूप का उपयोग करना होगा । हम जानते हैं कि। जो मैं सोच रहा था, वह किसने सोचा था कि छोरों के पास क्या है? किस भाषा ने लूप पेश किए? पहला लूप निर्माण क्या था? यह एक whileपाश था? एक forपाश? आदि?


22
चार्ल्स बैबेज और एडा लवलेस, सबसे अधिक संभावना है।
mcfinnigan

28
यह शैंपू निर्देशों, कुल्ला, लाठर, दोहराना में आविष्कार किया गया था। :-)
गाय सिरटन

13
@GuySirton, मूर्ख मत बनो, यह पुनरावृत्ति है।
मोवाल्कर

18
@ user838584 - यदि यह पुनरावृत्ति था, तो प्रत्येक repeatदूसरे को आमंत्रित करेगा repeat- आप कभी भी समाप्त नहीं करेंगे। मुझे लगता है कि शायद महिलाएं शैम्पू के निर्देशों को इस तरह पढ़ती हैं, लेकिन पुरुष इसे पुनरावृत्ति के रूप में पढ़ते हैं, और केवल अपने बालों को धोने के लिए कुछ मिनटों की आवश्यकता होती है।
स्टीव ३४

3
लूप्स के बिना एक कंप्यूटर एक कैलकुलेटर है।
Starblue

जवाबों:


102

के रूप में mouviciel और Emilio Garavaglia ने कहा, अवधारणा कंप्यूटिंग से पहले है। हालांकि, एक का पहला उदाहरण सॉफ्टवेयर पाश पाश था एडीए Lovelace गणना के लिए इस्तेमाल Bernoulli संख्या में वर्णित है, नोट जी की उसके अनुवाद के चार्ल्स बैबेज द्वारा आविष्कार किया विश्लेषणात्मक इंजन के स्केच , द्वारा वामो Menabrea । एनालिटिकल इंजन की लूप की क्षमता को मेनाब्रिया द्वारा शीघ्रता से नोट किया गया है:

यह समझा जा रहा है, आइए, हम उन श्रृंखलाओं की शुरुआत में, जिन्हें हम निष्पादित करना चाहते हैं, डिविजन 2 पर सुई C, डिवीजन 5 पर सुई B और डिवीजन 9 पर सुई A रखें। आइए हम अनुमति देते हैं। हड़ताल करने के लिए डायल सी का हथौड़ा; यह दो बार हड़ताल करेगा, और एक ही समय में सुई बी दो डिवीजनों से गुजरेगी। बाद वाला नंबर 7 का संकेत देगा, जो पहले अंतर के कॉलम में नंबर 5 को सफल बनाता है। यदि हम अब डायल बी के हथौड़ा को अपनी बारी में हड़ताल करने की अनुमति देते हैं, तो वह सात बार हड़ताल करेगा, जिसके दौरान सुई ए सात डिवीजनों को आगे बढ़ाएगा; ये पहले से चिह्नित नौ में जोड़े गए हैं, यह संख्या 16 देगा, जो वर्ग संख्या लगातार 9 है। अगर हम अब इन ऑपरेशनों की सिफारिश करते हैं, तो सुई सी के साथ शुरू होती है, जिसे हमेशा विभाजन 2 पर छोड़ दिया जाता है।

एनालिटिकल इंजन के लूपिंग तंत्र को सीधे यूसुफ मैरी जैक्वार्ड के मैकेनिकल लूम (1801) से विरासत में मिला है , जैसा कि मेनाब्रिया द्वारा संस्मरण में उल्लेखित है:

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

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

जैक्वार्ड का करघा बार-बार उत्पादन करने के लिए मशीन को ऑर्डर करने के संदर्भ में लूप का एक बहुत ही प्रारंभिक अनुप्रयोग है :

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

जैक्वार्ड के करघा को एक संग्रहीत कार्यक्रम के बहुत प्रारंभिक रूप के रूप में भी पहचाना जाता है :

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

चार्ल्स बैबेज ने भी जेकोक्वार्ड के भंडारण की प्रक्रिया को एनालिटिकल इंजन में बदल दिया , एक छेद की उपस्थिति या अनुपस्थिति ने मशीन को एक सरल ऑन-ऑफ कमांड का संचार किया:

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

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

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

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


3
जैक्वार्ड के करघे से पहले, आप कारगिलों में मैकेनिकल लूप पा सकते हैं, जैसे कि ब्रुग्स में, जहां बेलन के रोटेशन से घंटियाँ नियंत्रित होती हैं ।
मौविइल

6
@mouviciel मैं आपकी घंटी की गंभीरता देख रहा हूं और मैं आपको एक एंटीक्वाईथेरा तंत्र जुटाता हूं। ; पी
यानिस

2
एक 2000 y / o कंप्यूटर सहित आपके विश्वकोश उत्तर के लिए +1!
मौवीसील

2
इस खूबसूरत जवाब ने मुझे सवाल पसंदीदा बना दिया। यह न केवल प्रश्न का उत्तर देता है, बल्कि "एक प्रश्न का उत्तर कैसे दें" के उदाहरण के रूप में है। अच्छी नौकरी, प्रिय महोदय।
चानी

इस उत्तर को स्वीकार कर लिया क्योंकि यह निर्णायक, विश्वकोश और सिर्फ सादा भयानक था!
गतिशील

50

लूप्स कंप्यूटिंग की भविष्यवाणी करते हैं। आप उन्हें संगीत संकेतन में ग्रेगोरियन मंत्र के रूप में जल्दी पा सकते हैं :

बार-बार संकेत


2
यह एक बड़ा जवाब हो सकता है अगर इसमें थोड़ा और विस्तार जोड़ा गया। फिर भी, बहुत अच्छा काम।
डायनामिक

कृपया अधिक संदर्भ दें (जल्द से जल्द तारीख, लूप / रिपीट कंस्ट्रक्शन को जल्द से जल्द संगीतमय संकेतन)
स्किपी फास्टोल

@SkippyFastol यह उस लेख में है: en.wikipedia.org/wiki/Repeat_sign#Other_notation
cwallenpoole

32

"फिर से करो" की अवधारणा किसी भी तरह मानवीय धारणा के लिए "आदिम" है। आप इसे एक ऐसे बच्चे को बता सकते हैं जिसने प्राकृतिक भाषा की एक न्यूनतम समझ को विस्तृत किया है।

असतत प्रणालियों में लूप्स सभी परिमित राज्य मशीनों में पाए जाते हैं जब आप स्वीकार करते हैं कि आप उस स्थिति तक पहुंच सकते हैं जिससे आप पहले भी गए हैं

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

मशीन कोड में, एक छलांग कोडित की जाती है JP-Z-nnnn(जहां Z है व्हाफ़र फ्लैग ypu आधार आपकी स्थिति)। उच्च स्तरीय भाषा में यह लगभग तुरंत अनुवाद हो जाता है

if(z) goto x;

एक लूप कुछ भी नहीं है gotoजहां एक्स लेबल गोटो निर्देश से पहले है।

हर दूसरे सूत्रीकरण (के लिए करते हैं, जबकि, आदि) जंगली गोटो को बेहतर बनाने के लिए केवल "सिंटैक्टिक शुगर" होता है, जब तक कि कुछ होने तक बहुत आम मामलों में जंगली गोटो को बेहतर बनाना


4

लूपिंग की अवधारणा उन चीजों में से एक है जो एक साधारण गणना मशीन से पूर्ण विकसित कंप्यूटर को अलग करती है। यदि कोई सिस्टम लूपिंग का समर्थन नहीं करता है तो यह ट्यूरिंग-पूर्ण नहीं है और इसलिए कंप्यूटर नहीं है।

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


6
लैम्ब्डा कैलकुलस में कोई लूप नहीं है (और कोई स्थिति या कूदता नहीं है), फिर भी यह ट्यूरिंग-पूर्ण है। पुनरावृत्ति पुनरावृत्ति की तरह ही शक्तिशाली है।

3
आप किसी भी लूप को पुनरावर्ती कार्य के लिए फिर से लिख सकते हैं और छोरों को समाप्त कर सकते हैं
शाफ़्ट सनकी

5
लूप्स पर विकिपीडिया लेख एक पूरी तरह से असंबंधित अवधारणा के बजाय लूप को व्यक्त करने के तरीके के रूप में पुनरावृत्ति का वर्णन करता है। en.wikipedia.org/wiki/Program_loop#Loops सीपीयू के पास लूप न होने के कारण, उनके पास उन्हें लागू करने के लिए आवश्यक उपकरण हैं (एक
मध्यस्थता

8
संक्षेप में, लूप को व्यक्त करने के लिए पुनरावृत्ति का उपयोग किया जा सकता है । यह है एक काफी अलग अवधारणा है, भले ही वे एक दूसरे के लिए isomorphic हैं। एक कॉफी मग सिर्फ एक डोनट नहीं है क्योंकि टोपोलॉजिस्ट कथित तौर पर उन्हें भ्रमित करते हैं।

4
सच है, लेकिन किसी भी ट्यूरिंग-पूर्ण प्रणाली में एक ही अनुक्रम को कई बार निष्पादित करने की अवधारणा को व्यक्त करने का एक तरीका है, तंत्र पुनरावृत्ति हो सकता है, या निर्देश सूची में पीछे की ओर कूद सकता है या कुछ और जो समान प्रभाव प्राप्त करता है। यदि कोई सिस्टम निर्देशों के एक सेट को दोहराने का कोई तरीका प्रदान नहीं करता है (सूची में दिए निर्देशों को भौतिक रूप से दोहराने के अलावा) तो यह पूर्ण नहीं हो सकता है। एनालिटिकल इंजन पूरा ट्यूरिंग था, इसलिए इसे एक या दूसरे रूप में लूपिंग को लागू करना चाहिए।
गॉर्डन

3

मान लें कि आप आधुनिक पाठ कंप्यूटर प्रोग्रामिंग भाषाओं का मतलब है।

Algol60 में "For", "DO", "UNTIL" और "WHILE" है, इसलिए यह 1960 से पहले था।

रेट्रो कम्प्यूटिंग संग्रहालय में कुछ भाषाओं 1960 पूर्व है।

Kविकkalkul , स्वीडिश परमाणु के प्रोग्रामिंग के लिए '50 के दशक से भाषा केवल GOTO है। (हालांकि, 90 के दशक से किवक्कलकुल लगभग एक धोखा है, वास्तविक ऐतिहासिक भाषा नहीं है।)

कोनराड ज्यूस द्वारा प्लैंकॉकल जल्द से जल्द मुझे मिल सकता है। इसमें एक "फर" निर्माण है।


हाल के दिनों तक प्लांकालुकल को अनिवार्य रूप से अप्रकाशित किया गया था, और किवक्कलकुल लंबे समय से एक धोखा था। उस प्रकाश में, श्रेय संभवतः जॉन बैकस और फोरट्रान टीम को जाना पड़ता है , जिनके पास 1957 में DOलूप्स के साथ मैदान में चल रहे कंपाइलर थे ।
रॉस पैटरसन

2

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

हालांकि, पुनरावृत्ति अनुक्रमों और गिनती नियंत्रित छोरों के विचार, साथ ही हम जिसे लूप कहते हैं, उस आदमी के काम में चर्चा की जाती है, जिसके लिए एल्गोरिदम का नाम दिया गया है: नौवीं शताब्दी के मुहम्मद इब्न मूसा अल-ख्वारिज़मी । उनकी दूसरी पुस्तक, अल-किताब अल-मुख्तसर फाई हसाब अल-ज़बर वा'ल-मुक़ाबाला (الكتاب المختصر في حساب الجبر وممقابلة) (कम्पलेन द्वारा गणना पर पूर्णता और संतुलन के लिए एक संग्रह), न्यूटन, लेफ्टिनेंट के लिए जाना जाता था। ।

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

अल-ख्वाज़मी और उनके काम के बारे में अधिक जानकारी के लिए देखें:

http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html

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