किस प्रोग्रामिंग भाषा में "चलो" पहली बार दिखाई दिया?


24

मैं लिस्प, क्लॉजुर और हास्केल में इस्तेमाल होने वाले "लेट" की उत्पत्ति के बारे में सोच रहा था। क्या किसी को पता है कि यह पहली बार किस भाषा में दिखाई दिया?


असेंबलर 1954 से LET के बजाय MOV का उपयोग करता है। क्या यह पर्याप्त नहीं है?
गंगानुस

1
LISP एक अच्छा उम्मीदवार होने के लिए पर्याप्त पुराना है।
मौविसील

2
किसी भी प्रश्न के लिए "किस प्रोग्रामिंग भाषा में X पहली बार दिखाई दिया" लिस्प एक सही उत्तर के लिए एक बहुत अच्छा अनुमान है
Zachary K

2
चलो मूल गणित से हैं, अन्य प्रोग्रामिंग भाषाओं से नहीं।
पीटर बी

आप यह गलत धारणा बनाते हैं कि प्रोग्रामिंगलंगुज में "लेट" का पहला उपयोग लिस्प, क्लूजुर और हास्केल में "लेट" -यूज का मूल है।
Pieter B

जवाबों:


41

ठीक है, 1964 में शुरू से ही सिंटैक्स के हिस्से के रूप में बेसिक के पास LETअसाइनमेंट था , इसलिए वह letलिस्प के उपयोग की भविष्यवाणी करता था , जैसा कि क्रिस जस्टर-यंग बताते हैं कि 1970 के दशक तक लिस्प के विकास के अनुसार प्रकट नहीं हुआ था ।

मुझे विश्वास नहीं है कि COBOL, फोरट्रान, या ALGOL LETउनके सिंटैक्स में है। इसलिए मैं BASIC के साथ जाने वाला हूं।


11
लेकिन शब्दार्थ बहुत अलग है - letमूल में एक शाब्दिक रूप से स्कोप्ड बाइंडिंग नहीं है। तो, सही उत्तर कुछ इस तरह होगा "यह पहली बार अंग्रेजी में, 12 वीं शताब्दी से पहले दिखाई दिया"।
एसके-लॉजिक

12
लेकिन सवाल यह है: पहली बार "चलो" किस प्रोग्रामिंग भाषा में दिखाई दिया? मैं वास्तव में अंग्रेजी को एक प्रोग्रामिंग भाषा नहीं मानता (कम से कम इस संदर्भ में)।
ग्रेग

7
letइस संदर्भ में ( letx isकुछ inनिम्नलिखित अभिव्यक्ति) पहली बार अंग्रेजी में गणितीय ग्रंथों में दिखाई दिया, और यह वह जगह है जहां यह प्रोग्रामिंग में आया था। मैं औपचारिक प्रणालियों के बीच कोई अंतर नहीं देखता हूं - गणितीय भाषाएं, प्रोग्रामिंग भाषाएं, जो कुछ भी - वे सभी समान हैं।
SK- लॉजिक

3
"लेट x 3 है" उचित व्याकरण नहीं है। आप कभी भी किसी भी अंग्रेजी पाठ्य पुस्तक में नहीं देखेंगे। आपके पास "होने" की क्रिया का गलत काल है। यह "लेट x 3 होना चाहिए" या "लेट x बराबर 3" होना चाहिए। किसी भी तरह से, शब्दार्थ या नहीं, प्रश्न लेखक एक प्रोग्रामिंग भाषा के लिए पूछ रहा था। इसलिए जब तक आप एक ऐसे कंप्यूटर के बारे में नहीं जानते जो अंग्रेजी निर्देश लेता है जो कि BASIC से पहले है, मैं इसे नहीं खरीद रहा हूँ। अन्यथा, हम केवल "psuedo-code" का उत्तर दे सकते थे और यह मान्य होगा, लेकिन उसके प्रश्न की भावना का सम्मान नहीं करेगा।
ग्रेग

1
बेशक मैंने एमएल नोटेशन का इस्तेमाल किया, और मेरा मतलब था equals, नहीं is। और, हाँ, छद्म कोड अब तक का सबसे अच्छा जवाब है।
SK-तर्क

30

मैं एक सैद्धांतिक दृष्टिकोण जोड़ना चाहूंगा: शास्त्रीय लंबोदी गणना में, letकेवल वाक्यगत चीनी है। उदाहरण के लिए

let x = N in M

बस के रूप में फिर से लिखा जा सकता है

(λx.M)N

प्रारंभिक (कार्यात्मक) भाषाओं में इसकी पहली उपस्थिति इतनी दिलचस्प नहीं है।

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

let id = λx . x in id id

यहाँ idबहुरूपी है, इसके प्रकार हैं ∀α.α → α, और इसलिए id idटाइप-चेक - यह प्रकार id id : τ → τमनमाना ym के लिए है। (पहले के लिए idहम असाइन τ → τकरते हैंα और दूसरे के लिए idहम असाइन τकरते हैं α।)

हालाँकि, हम इसे λ एब्स्ट्रेक्शन और एप्लिकेशन का उपयोग करके दोबारा नहीं लिख सकते हैं। अभिव्यक्ति

(λid . id id)(λx.x)

टाइप-चेक नहीं करता है, क्योंकि पहले λ अमूर्त के भीतर idएक मोनोमोर्फिक प्रकार सौंपा जाना चाहिएid : σ कुछ is के लिए , और ऐसा कोई because नहीं है जिसे हम लागू कर सकते id : σहैं id : σ

आप खुद हास्केल में यह कोशिश कर सकते हैं। जबकिlet id = \x -> x in id id :: t -> t टाइप-चेक, टाइपिंग में (\id -> id id)(\x -> x)विफल रहता है

जाँचें: अनंत प्रकार का निर्माण नहीं कर सकती हैं: अभिव्यक्ति t0 = t0 -> t0
के पहले तर्क में id, अभिव्यक्ति में:id
id id
\id -> id id


एक बहुत ही दिलचस्प जवाब के लिए +1। एक पक्ष विषय के रूप में, यदि आप एक को जानते हैं, तो क्या आप "टिप्पणी के बाद (मुख्य प्रश्न से संबंधित नहीं है) पोस्ट कर सकते हैं" वाक्यगत चीनी "की एक कठोर परिभाषा का संदर्भ।
जियोर्जियो

3
@ जियोर्जियो द न्यू हैकर के शब्दकोश को उद्धृत करने के लिए : इसमें किसी भाषा या अन्य औपचारिकता को जोड़ा गया है ताकि इसे मनुष्यों के लिए "मीठा" बनाया जा सके, ऐसी विशेषताएं जो औपचारिकता की अभिव्यक्ति को प्रभावित नहीं करती हैं। इस्तेमाल किया esp। जब अन्य निर्माणों में "चीनी" सुविधा का एक स्पष्ट और तुच्छ अनुवाद होता है, जो पहले से ही मौजूद हैं। सी की a[i]संकेतन के लिए सिंटैक्टिक चीनी है *(a + i) विकिपीडिया लेख की भी अच्छी व्याख्या है।
पेट्र पुडलक

3
रोचक सामग्री लेकिन शायद ही से संबंधित letकी शुरूआत
wirrbel

2
यह एक अच्छा लिखित उत्तर है, लेकिन यह मूल प्रश्न का उत्तर नहीं देता है।
जोहान कार्ल्ससन

1
@JohanKarlsson मैं यह दावा नहीं कर रहा हूं कि यह एक सीधा जवाब है, लेकिन मुझे लगता है कि यह विषय के लिए भी प्रासंगिक है। विशेष रूप से क्योंlet पेश किया गया था, जैसा कि प्रश्न से शुरू होता है, मैं "लेट" की उत्पत्ति के बारे में सोच रहा था ...
पेट्र पुडल्क

22

लिस्प इनमें से सबसे पुरानी भाषा है जिसमें अब एलईटी है । लेकिन बेसिक पहला ऐसा था जो इसे मिला, क्योंकि लिस्प ने इसे बहुत बाद में प्राप्त किया था।

Ada Lovelace विश्लेषणात्मक इंजन (1843) में - कोई LET नहीं, एक कार्यक्रम इस प्रकार है:

N0 6 N1 1 N2 1 × L1 L0 S1  L0 L2 S0 L2 L0 CB?11 '

ज़ुंक के प्लैंकल्कल में (1943-45) कार्यक्रम दिखता है:

P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0]
max(V0[:8.0],V1[:8.0]) → Z1[:8.0]
max(Z1[:8.0],V2[:8.0]) → R0[:8.0]
END

शॉर्ट कोड 1949 में जॉन मौचली द्वारा प्रस्तावित किया गया था

X3 =  (  X1 +  Y1 )  /  X1 * Y1   

1950 का इंटरमीडिएट PL, असाइनमेंट के लिए उपयोग किया गया ->

1952 में रुटिसहॉज़र का उपयोग किया गया =>=

बॉहम्स कंपाइलर, 1952, का उपयोग किया गया ->

मैनचेस्टर विश्वविद्यालय में, अलिक ग्लेनी Autocode1950 के दशक की शुरुआत में विकसित हुआ। पहला कोड और कंपाइलर 1952 में मैनचेस्टर विश्वविद्यालय में मार्क 1 कंप्यूटर के लिए विकसित किया गया था और इसे पहली संकलित उच्च-स्तरीय प्रोग्रामिंग भाषा माना जाता है। फिर, ->असाइनमेंट के लिए

चार्ल्स एडम्स, बैकस के समूह का फोरट्रान 0, ब्रूकर का ऑटोकोड 2, लुबिमस्की और कामिन का ПП1; 1954 में सभी, फिर से=

असाइनमेंट के लिए BACAIC (ग्रीम्स, पोर्टर), 1954 *!

कोम्पाइलर, ADES, 1955, =

आईटी, 1956, <-

फोरट्रान, 1957, =

एटी -3 (1956), मैथ-मैटिक (1957), फिर से = ,

लेकिन 1957 में फ्लो-मैटिक में दो असाइनमेंट थे, और दोनों शब्दों में हैं

TRANSFER a TO b तथा MOVE a TO b

बाउर और सैमल्सन की मशीन, 1957: =>


क्षमा करें, मैं 1957 और 1964 के बीच सभी भाषाओं को कवर नहीं कर सकता, लेकिन अधिक से अधिक भाषाएँ

1957 - COMTRAN (forerunner to COBOL)
1958 - LISP
1958 - ALGOL 58
1959 - FACT (forerunner to COBOL)
1959 - COBOL
1959 - RPG
1962 - APL
1962 - Simula
1962 - SNOBOL
1963 - CPL (forerunner to C)

असाइनमेंट के लिए LET नहीं है। या LISP के मामले में नहीं था


डार्टमाउथ BASIC मूल प्रोग्रामिंग भाषा का मूल संस्करण है। पहला इंटरैक्टिव संस्करण जून 1964 में आम उपयोगकर्ताओं के लिए उपलब्ध कराया गया था ;

 LET / = — assign formula results to a variable

14

खैर, उन तीनों के बीच, लिस्प निश्चित रूप से पहले था। हास्केल 80 के दशक में और क्लोजर 00 के दशक में आया letथा , और लंबे समय तक रहा था उन तारीखों में से पहले हो । :-)

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

अपडेट: लिस्प के विकास के अनुसार (पृष्ठ 46 देखें), यह उल्लेख letकिया गया कि 70 के दशक में आविष्कार किया गया था:

LETप्रत्येक साइट पर स्थानीय रूप से सबसे पहले आविष्कार और पुनर्निवेश किया गया- जो मैक्लिस्प दुनिया के लिए एक देर से हास्य था; लिस्प आर्क के अनुसार, यह 1979 में पीडीपी -10 मैक लिस्प में लिस्प-मशीन लिस्प से उसी समय DEFMACROऔर जटिल लिस्प मशीन DEFUNतर्क सिंटैक्स में अवशोषित हो गया था ।

अभी भी काफी जवाब नहीं है कि क्या यह पहले किसी अन्य भाषा में आविष्कार किया गया था, ज़ाहिर है, लेकिन अभी भी एक और डेटा बिंदु। :-)


4
70 के दशक के दौरान ML भी विकसित किया गया था, इसलिए यह हो सकता है कि उस अवधि में ML और लिस्प दोनों में विचार पेश किया गया था।
जियोर्जियो

9

जनवरी 1978 से एआईएम -452 की पहली संशोधित योजना रिपोर्ट है LET। पेज 9

ध्यान दें कि लिस्प ने पहले PROGस्थानीय चर पेश करने के लिए एक अलग निर्माण का उपयोग किया था ।

(let ((a 1)
      (b 1))
  (+ a b))

के रूप में लगभग पहले लिखा गया होगा

(prog (a b)
  (setq a 1)
  (setq b 1)
  (+ a b))

letहमेशा लिस्प बोलियों में शाब्दिक रूप से स्कोप किया गया था ?
wirrbel

1
AIM-452 योजना की पहली संशोधित रिपोर्ट है। पहली रिपोर्ट 1975 से एआईएम -349 है। और एआईएम -848 संशोधित संशोधित रिपोर्ट है। और उसके बाद, "संशोधित ^ 3" रिपोर्ट कहा जाता है (यानी "आर ^ एनआरएस" नामकरण का उपयोग करने वाला पहला) पहला था जो एआईएम नहीं था, लेकिन एक वास्तविक भाषा विनिर्देश था। थोडा इधर उधर घूमने से आपको इन सभी दस्तावेजों की PDF मिल जाएगी ताकि आप इन्हें अपने लिए पढ़ सकें। यदि आप आगे वापस जाना चाहते हैं, तो आप सॉफ्टवेयर संरक्षण समूह से एक पुराने MacLisp मैनुअल पा सकते हैं, और शायद आप कुछ LISP 1.5 रिपोर्ट भी पा सकेंगे।
तैलानुब

@wirrbel, ऐसा लगता letहै कि लेक्सिकल स्कूपिंग (स्कीम, '75) जितना पुराना है, और लेक्सिकल स्कोपिंग के लिए स्वीकृति प्राप्त करने में कुछ समय लगा, इसलिए मुझे लगता है कि letडायनेमिक रूप से बंद लिस्स के संदर्भ में पहले उदाहरण थे। आज, एमएसीएस लिस्प में अभी भी डिफ़ॉल्ट रूप से गतिशील गुंजाइश है, lambdaऔर let(वैसे भी पूर्व के लिए बाद की चीनी) अपने मापदंडों को गतिशील रूप से बांधते हैं।
तैलानुब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.