एम-एक्सप्रेशन
कंप्यूटर प्रोग्रामिंग में, एम-एक्सप्रेशन (या मेटा-एक्सप्रेशन) लिस्प (प्रोग्रामिंग भाषा) के लिए प्रारंभिक प्रस्तावित वाक्य विन्यास था, जो फोरट्रान और एएलजीओएल जैसी समकालीन भाषाओं से प्रेरित था। नोटेशन को कभी भी भाषा में प्रयुक्त नहीं किया गया और, इस प्रकार, इसे कभी भी अंतिम रूप नहीं दिया गया था।[1]
एस-एक्सप्रेशन की तुलना में, एम-एक्सप्रेशन फ़ंक्शन नोटेशन, इन्फ़िक्स ऑपरेटर (ए defun
ऑपरेटर सहित), और शॉर्टहैंड के लिए cond
और list
भाषा में प्रस्तुत करते हैं.[2]
पृष्ठभूमि
जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) ने 1960 में मैसाचुसेट्स की तकनीकी संस्था में रिसर्च फेलो रहते हुए लिस्प पर पहला पेपर प्रकाशित किया था। इसमें उन्होंने प्रतीकात्मक एक्सप्रेशनयों (एस-एक्सप्रेशन) की भाषा का वर्णन किया जो जटिल संरचनाओं को सूचियों के रूप में प्रस्तुत कर सकती है। फिर उन्होंने एस-एक्सप्रेशन पर आदिम संचालन का सेट और मेटा-एक्सप्रेशन (एम-एक्सप्रेशन) की भाषा को परिभाषित किया जिसका उपयोग अधिक जटिल संचालन को परिभाषित करने के लिए किया जा सकता है। अंत में, उन्होंने दिखाया कि मेटा-भाषा को एस-एक्सप्रेशन के साथ कैसे दर्शाया जा सकता है, जिसके परिणामस्वरूप ऐसी प्रणाली तैयार हुई जो संभावित रूप से स्व-होस्टिंग (संकलक)कंपाइलर) सेल्फ-होस्टिंग थी।[3] इस पेपर के ड्राफ्ट संस्करण को एआई मेमो 8 के नाम से जाना जाता है।[4]
एक्सप्रेशन प्रकार | गणितीय नोटेशन | एम-एक्सप्रेशन | आधुनिक लिस्प एस-एक्सप्रेशन |
---|---|---|---|
सूची मान | [1;2;3]
|
(quote (1 2 3))
| |
कार्य अनुप्रयोग | f[x;y]
|
(f x y)
| |
फ़ंक्शन परिभाषा | label[square;λ[[x];times[x;x]]]
|
(define square (lambda (x) (* x x)))
| |
सशर्त एक्सप्रेशन | [lessp[x;0] → minus[x]; T → x]
|
(cond ((< x 0) (- x)) (t x))
|
मैककार्थी ने कंपाइलर की आंतरिक प्रक्रियाओं का वर्णन करने के लिए भाषा सिंटैक्स के रूप में एम-एक्सप्रेशन और एस-एक्सप्रेशन का उपयोग करके स्वचालित लिस्प कंपाइलर (एलआईएसपी 2) विकसित करने की योजना बनाई थी। स्टीव रसेल (कंप्यूटर वैज्ञानिक) या स्टीफन बी. रसेल ने पेपर पढ़ा और उन्हें सुझाव दिया कि एस-एक्सप्रेशन अधिक सुविधाजनक वाक्यविन्यास है। चूँकि मैक्कार्थी ने इस विचार को अस्वीकार कर दिया, रसेल और उनके सहयोगी डेनियल जे. एडवर्ड्स ने दुभाषिया (कंप्यूटिंग) प्रोग्राम को हाथ से कोड किया जो एस-एक्सप्रेशन को निष्पादित कर सकता था।[2] इस प्रोग्राम को मैक्कार्थी के अनुसंधान समूह द्वारा अपनाया गया, जिससेएस-एक्सप्रेशन को लिस्प के प्रमुख रूप के रूप में स्थापित किया गया था।
मैक्कार्थी ने 1979 में एम-एक्सप्रेशन के भाग्य पर विचार किया था:
एम-अभिव्यक्तियों को सटीक रूप से परिभाषित करने और उन्हें संकलित करने या कम से कम उन्हें एस-अभिव्यक्तियों में अनुवाद करने की परियोजना को न तो अंतिम रूप दिया गया था और न ही स्पष्ट रूप से छोड़ा गया था। यह बस अनिश्चित भविष्य में सिमट गया, और प्रोग्रामर की एक नई पीढ़ी सामने आई, जिन्होंने किसी भी फोरट्रान-जैसे या एल्गोल-जैसे नोटेशन के बजाय आंतरिक नोटेशन को प्राथमिकता दी, जिसे तैयार किया जा सकता था।.[5]
कार्यान्वयन
सिंटेक्स शुगर एम-एक्सप्रेशन का रूप 1988 से वोल्फ्राम मैथमैटिका की वोल्फ्राम भाषा में प्रयुक्त किया गया है:
एक्सप्रेशन प्रकार | सुगन्धित वाक्यविन्यास (इनपुटफॉर्म) | फ़ंक्शन फॉर्म (पूर्ण प्रपत्र) | |
---|---|---|---|
सूची मान | {1, 2, 3}
|
List[1, 2, 3]
| |
फ़ंक्शन अनुप्रयोग | f[x, y]
|
f[x, y]
| |
फ़ंक्शन परिभाषा | प्योर | square = #*# &
|
Set[square, Function[Times[Slot[1],Slot[1]]]]
|
नामांकित | square = x ↦ x*x
|
Set[square, Function[x, Times[x, x]]]
| |
क्रम | square[x_] := x*x
|
SetDelayed[square[Pattern[x, Blank[]]], Times[x, x]]
| |
सशर्त एक्सप्रेशन
|
If[x<0,-x,x]
|
Piecewise[{{-x, x < 0}}, x]
|
एलआईएसपी के लिए
एमएलस्प लिस्प के लिए एम-एक्सप्रेशन-जैसे फ्रंटएंड को प्रयुक्त करने के लिए समकालीन (1968-1973) परियोजना थी। स्वच्छ मैक्रोज़, पैटर्न मिलान और बैक ट्रैकिंग जैसी कुछ अतिरिक्त सुविधाएँ सम्मिलित की गईं थी। यह अंततः परित्यक्त लिस्प70 ड्राफ्ट में विकसित हुआ था। 1989 से एम.एल.आई.एस.पी (मेटाएलआईएसपी) योजना के साथ एम-एक्सप्रेशन को मिश्रित करने का और प्रयास था।[6]
एआई मेमो 8 एम-एक्सप्रेशन के लिए पार्सर सामान्य लिस्प में उपलब्ध है, किन्तु मैक्रोज़ के साथ सामना करने में असमर्थता के कारण लेखक इसे एम-एक्सप्रेशन के विरुद्ध स्थिति के रूप में चाहता है।[7]
K के लिए
एपीएल (प्रोग्रामिंग भाषा)-परंपरा में अधिक संक्षिप्त नोटेशन के अतिरिक्त, के (प्रोग्रामिंग भाषा) में एम-एक्सप्रेशन भी सम्मिलित है।
fibs: {[n]
if[less[n;3];:iota[n]]
fibrec:{[list]
if[equal[n;count[list]];:list]
a:list[minus[count[list];1]]
b:list[minus[count[list];2]]
:_f[join[list;plus[a;b]]]
}
:fibrec[(0;1)]
}
आगे की प्रगति
मैकलिस्प में कोल (1977) प्रयुक्त किया गया था और यह इन्फिक्स ऑपरेटरों के साथ अल्गोल-जैसे सिंटैक्स को प्रस्तुत करने के समान लक्ष्य का पालन करता है।[6] यह सशस्त्र बेयर कॉमन लिस्प पर काम करने के लिए जाना जाता है।[8]
एक और वर्तमान (लगभग 2003) संस्करण आई-एक्सप्रेशन है, जो कोष्ठक को स्पष्ट रूप से इंगित करने के लिए ऑफ-साइड नियम का उपयोग करता है, और इस प्रकार कुछ मायनों में एस-एक्सप्रेशन और एम-एक्सप्रेशन के बीच मध्यवर्ती है। आई-एक्सप्रेशन को कार्यान्वयन के लिए योजना अनुरोध 49 में स्कीम (प्रोग्रामिंग लैंग्वेज) के सहायक सिंटैक्स के रूप में प्रस्तुत किया गया था, किन्तु उन्हें व्यापक रूप से नहीं अपनाया गया है।[9]
एक और विकास स्वीट टी-एक्सप्रेशन है, जिसमें बिना किसी पूर्वता के इन्फ़िक्स ऑपरेटर हैं। आई-एक्सप्रेशन की तरह, टी-एक्सप्रेशन एस-एक्सप्रेशन से दूर केवल सरल परिवर्तन है, जिससे सैद्धांतिक रूप से उनका उपयोग किसी भी लिस्प बोली पर किया जा सके और मैक्रोज़ जैसी सुविधाओं में हस्तक्षेप न किया जा सकता है।[10]
अतिरिक्त सिंटैक्स-संबंधी में ऐप्पल की डायलन (प्रोग्रामिंग भाषा) (अल्गोल-जैसे टोकन) और क्लोजर द्वारा अन्य शाब्दिक सिंटैक्स को सम्मिलित करना सम्मिलित है।[6]
टिप्पणियाँ
संदर्भ
- ↑ "एलआईएसपी का कार्यान्वयन". www-formal.stanford.edu. Retrieved 2020-03-29.
- ↑ 2.0 2.1 2.2 "LISP 1.5 Programmer's Manual" (PDF). Community.computerhistory.org. 1965. Archived from the original (PDF) on 2006-02-11. Retrieved 2013-09-02.
- ↑ McCarthy, John (April 1960) "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I"
- ↑ McCarthy, John (March 1959). "Recursive Functions of Symbolic Expressions and Their Computation by Machine (AI Memo 8)".
- ↑ "The implementation of LISP". Formal.stanford.edu. 1979-02-12. Retrieved 2013-08-24.
- ↑ 6.0 6.1 6.2 Lee, Xah. "एलआईएसपी इंफिक्स सिंटैक्स सर्वे".
- ↑ "एम-एक्सप्रेशन के लिए एक पार्सर".
Let's newbies play with them, and realize how impractical they are. Note for example, that we cannot use macros anymore because their syntax would need to be known by the M-expression parser.
- ↑ CGOL on ABCL Development of the Armed Bear Common Lisp implementation blog.
- ↑ Möller, Egil (2003). "SRFI 49: Indentation-sensitive syntax". srfi.schemers.org.
- ↑ Wheeler, DA (2013). "SRFI 110: Sweet-expressions (t-expressions)". srfi.schemers.org.