मैं लिस्प, क्लॉजुर और हास्केल में इस्तेमाल होने वाले "लेट" की उत्पत्ति के बारे में सोच रहा था। क्या किसी को पता है कि यह पहली बार किस भाषा में दिखाई दिया?
मैं लिस्प, क्लॉजुर और हास्केल में इस्तेमाल होने वाले "लेट" की उत्पत्ति के बारे में सोच रहा था। क्या किसी को पता है कि यह पहली बार किस भाषा में दिखाई दिया?
जवाबों:
ठीक है, 1964 में शुरू से ही सिंटैक्स के हिस्से के रूप में बेसिक के पास LETअसाइनमेंट था , इसलिए वह letलिस्प के उपयोग की भविष्यवाणी करता था , जैसा कि क्रिस जस्टर-यंग बताते हैं कि 1970 के दशक तक लिस्प के विकास के अनुसार प्रकट नहीं हुआ था ।
मुझे विश्वास नहीं है कि COBOL, फोरट्रान, या ALGOL LETउनके सिंटैक्स में है। इसलिए मैं BASIC के साथ जाने वाला हूं।
letमूल में एक शाब्दिक रूप से स्कोप्ड बाइंडिंग नहीं है। तो, सही उत्तर कुछ इस तरह होगा "यह पहली बार अंग्रेजी में, 12 वीं शताब्दी से पहले दिखाई दिया"।
letइस संदर्भ में ( letx isकुछ inनिम्नलिखित अभिव्यक्ति) पहली बार अंग्रेजी में गणितीय ग्रंथों में दिखाई दिया, और यह वह जगह है जहां यह प्रोग्रामिंग में आया था। मैं औपचारिक प्रणालियों के बीच कोई अंतर नहीं देखता हूं - गणितीय भाषाएं, प्रोग्रामिंग भाषाएं, जो कुछ भी - वे सभी समान हैं।
equals, नहीं is। और, हाँ, छद्म कोड अब तक का सबसे अच्छा जवाब है।
मैं एक सैद्धांतिक दृष्टिकोण जोड़ना चाहूंगा: शास्त्रीय लंबोदी गणना में, 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, अभिव्यक्ति में:idid id\id -> id id
a[i]संकेतन के लिए सिंटैक्टिक चीनी है *(a + i)। विकिपीडिया लेख की भी अच्छी व्याख्या है।
letकी शुरूआत
let पेश किया गया था, जैसा कि प्रश्न से शुरू होता है, मैं "लेट" की उत्पत्ति के बारे में सोच रहा था ...
लिस्प इनमें से सबसे पुरानी भाषा है जिसमें अब एलईटी है । लेकिन बेसिक पहला ऐसा था जो इसे मिला, क्योंकि लिस्प ने इसे बहुत बाद में प्राप्त किया था।
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
खैर, उन तीनों के बीच, लिस्प निश्चित रूप से पहले था। हास्केल 80 के दशक में और क्लोजर 00 के दशक में आया letथा , और लंबे समय तक रहा था उन तारीखों में से पहले हो । :-)
जैसा कि लिस्प ने यह आविष्कार करने के लिए भाषा थी , मैं अभी तक इसके लिए प्रतिज्ञा नहीं कर सकता, लेकिन मैं कुछ शोध करूंगा और देखूंगा। :-)
अपडेट: लिस्प के विकास के अनुसार (पृष्ठ 46 देखें), यह उल्लेख letकिया गया कि 70 के दशक में आविष्कार किया गया था:
LETप्रत्येक साइट पर स्थानीय रूप से सबसे पहले आविष्कार और पुनर्निवेश किया गया- जो मैक्लिस्प दुनिया के लिए एक देर से हास्य था; लिस्प आर्क के अनुसार, यह 1979 में पीडीपी -10 मैक लिस्प में लिस्प-मशीन लिस्प से उसी समयDEFMACROऔर जटिल लिस्प मशीनDEFUNतर्क सिंटैक्स में अवशोषित हो गया था ।
अभी भी काफी जवाब नहीं है कि क्या यह पहले किसी अन्य भाषा में आविष्कार किया गया था, ज़ाहिर है, लेकिन अभी भी एक और डेटा बिंदु। :-)
जनवरी 1978 से एआईएम -452 की पहली संशोधित योजना रिपोर्ट है LET। पेज 9
ध्यान दें कि लिस्प ने पहले PROGस्थानीय चर पेश करने के लिए एक अलग निर्माण का उपयोग किया था ।
(let ((a 1)
(b 1))
(+ a b))
के रूप में लगभग पहले लिखा गया होगा
(prog (a b)
(setq a 1)
(setq b 1)
(+ a b))
letहमेशा लिस्प बोलियों में शाब्दिक रूप से स्कोप किया गया था ?
letहै कि लेक्सिकल स्कूपिंग (स्कीम, '75) जितना पुराना है, और लेक्सिकल स्कोपिंग के लिए स्वीकृति प्राप्त करने में कुछ समय लगा, इसलिए मुझे लगता है कि letडायनेमिक रूप से बंद लिस्स के संदर्भ में पहले उदाहरण थे। आज, एमएसीएस लिस्प में अभी भी डिफ़ॉल्ट रूप से गतिशील गुंजाइश है, lambdaऔर let(वैसे भी पूर्व के लिए बाद की चीनी) अपने मापदंडों को गतिशील रूप से बांधते हैं।