मैं लिस्प, क्लॉजुर और हास्केल में इस्तेमाल होने वाले "लेट" की उत्पत्ति के बारे में सोच रहा था। क्या किसी को पता है कि यह पहली बार किस भाषा में दिखाई दिया?
मैं लिस्प, क्लॉजुर और हास्केल में इस्तेमाल होने वाले "लेट" की उत्पत्ति के बारे में सोच रहा था। क्या किसी को पता है कि यह पहली बार किस भाषा में दिखाई दिया?
जवाबों:
ठीक है, 1964 में शुरू से ही सिंटैक्स के हिस्से के रूप में बेसिक के पास LET
असाइनमेंट था , इसलिए वह let
लिस्प के उपयोग की भविष्यवाणी करता था , जैसा कि क्रिस जस्टर-यंग बताते हैं कि 1970 के दशक तक लिस्प के विकास के अनुसार प्रकट नहीं हुआ था ।
मुझे विश्वास नहीं है कि COBOL, फोरट्रान, या ALGOL LET
उनके सिंटैक्स में है। इसलिए मैं BASIC के साथ जाने वाला हूं।
let
मूल में एक शाब्दिक रूप से स्कोप्ड बाइंडिंग नहीं है। तो, सही उत्तर कुछ इस तरह होगा "यह पहली बार अंग्रेजी में, 12 वीं शताब्दी से पहले दिखाई दिया"।
let
इस संदर्भ में ( let
x 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
, अभिव्यक्ति में:id
id 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, का उपयोग किया गया ->
मैनचेस्टर विश्वविद्यालय में, अलिक ग्लेनी Autocode
1950 के दशक की शुरुआत में विकसित हुआ। पहला कोड और कंपाइलर 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
(वैसे भी पूर्व के लिए बाद की चीनी) अपने मापदंडों को गतिशील रूप से बांधते हैं।