एम-एक्सप्रेशन
कंप्यूटर प्रोग्रामिंग में, एम-एक्सप्रेशन (या मेटा-एक्सप्रेशन) लिस्प (प्रोग्रामिंग भाषा) के लिए प्रारंभिक प्रस्तावित वाक्यविन्यास था, जो फोरट्रान और एएलजीओएल जैसी समकालीन भाषाओं से प्रेरित था। नोटेशन को कभी भी भाषा में लागू नहीं किया गया और, इस प्रकार, इसे कभी भी अंतिम रूप नहीं दिया गया।[1]
एस-अभिव्यक्ति की तुलना में, एम-एक्सप्रेशन फ़ंक्शन संकेतन, इन्फ़िक्स ऑपरेटर (ए सहित) पेश करते हैं defun
ऑपरेटर), और शॉर्टहैंड के लिए cond
और list
भाषा में.[2]
पृष्ठभूमि
जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) ने 1960 में मैसाचुसेट्स की तकनीकी संस्था में रिसर्च फेलो रहते हुए लिस्प पर पहला पेपर प्रकाशित किया था। इसमें उन्होंने प्रतीकात्मक अभिव्यक्तियों (एस-एक्सप्रेशन) की भाषा का वर्णन किया जो जटिल संरचनाओं को सूचियों के रूप में प्रस्तुत कर सकती है। फिर उन्होंने एस-एक्सप्रेशन पर आदिम संचालन का सेट और मेटा-एक्सप्रेशन (एम-एक्सप्रेशन) की भाषा को परिभाषित किया जिसका उपयोग अधिक जटिल संचालन को परिभाषित करने के लिए किया जा सकता है। अंत में, उन्होंने दिखाया कि मेटा-भाषा को एस-एक्सप्रेशन के साथ कैसे दर्शाया जा सकता है, जिसके परिणामस्वरूप ऐसी प्रणाली तैयार हुई जो संभावित रूप से स्व-होस्टिंग (संकलक)कंपाइलर)|सेल्फ-होस्टिंग थी।[3] इस पेपर के ड्राफ्ट संस्करण को एआई मेमो 8 के नाम से जाना जाता है।[4]
Expression type | Mathematical notation | M-expression | Modern Lisp S-expression |
---|---|---|---|
List value | [1;2;3]
|
(quote (1 2 3))
| |
Function application | f[x;y]
|
(f x y)
| |
Function definition | label[square;λ[[x];times[x;x]]]
|
(define square (lambda (x) (* x x)))
| |
Conditional expression | [lessp[x;0] → minus[x]; T → x]
|
(cond ((< x 0) (- x)) (t x))
|
मैककार्थी ने कंपाइलर की आंतरिक प्रक्रियाओं का वर्णन करने के लिए भाषा सिंटैक्स के रूप में एम-एक्सप्रेशन और एस-एक्सप्रेशन का उपयोग करके स्वचालित लिस्प कंपाइलर (एलआईएसपी 2) विकसित करने की योजना बनाई थी। स्टीव रसेल (कंप्यूटर वैज्ञानिक)|स्टीफन बी. रसेल ने पेपर पढ़ा और उन्हें सुझाव दिया कि एस-एक्सप्रेशन अधिक सुविधाजनक वाक्यविन्यास है। हालाँकि मैक्कार्थी ने इस विचार को अस्वीकार कर दिया, रसेल और उनके सहयोगी डेनियल जे. एडवर्ड्स ने दुभाषिया (कंप्यूटिंग) प्रोग्राम को हाथ से कोड किया जो एस-एक्सप्रेशन को निष्पादित कर सकता था।[2] इस कार्यक्रम को मैक्कार्थी के अनुसंधान समूह द्वारा अपनाया गया, जिससे एस-अभिव्यक्ति को लिस्प के प्रमुख रूप के रूप में स्थापित किया गया।
मैक्कार्थी ने 1979 में एम-एक्सप्रेशन के भाग्य पर विचार किया:
The project of defining M-expressions precisely and compiling them or at least translating them into S-expressions was neither finalized nor explicitly abandoned. It just receded into the indefinite future, and a new generation of programmers appeared who preferred internal notation to any FORTRAN-like or ALGOL-like notation that could be devised.[5]
कार्यान्वयन
सिंटेक्स शुगर एम-एक्सप्रेशन का रूप 1988 से वोल्फ्राम मैथमैटिका की वोल्फ्राम भाषा में लागू किया गया है:
Expression type | Sugared syntax (InputForm) | Function form (FullForm) | |
---|---|---|---|
List value | {1, 2, 3}
|
List[1, 2, 3]
| |
Function application | f[x, y]
|
f[x, y]
| |
Function definition | pure | square = #*# &
|
Set[square, Function[Times[Slot[1],Slot[1]]]]
|
named | square = x ↦ x*x
|
Set[square, Function[x, Times[x, x]]]
| |
pattern | square[x_] := x*x
|
SetDelayed[square[Pattern[x, Blank[]]], Times[x, x]]
| |
Conditional expression[note 1]
|
If[x<0,-x,x]
|
Piecewise[{{-x, x < 0}}, x]
|
एलआईएसपी के लिए
एमएलस्प लिस्प के लिए एम-एक्सप्रेशन-जैसे फ्रंटएंड को लागू करने के लिए समकालीन (1968-1973) परियोजना थी। स्वच्छ मैक्रोज़, पैटर्न मिलान और बैक ट्रैकिंग जैसी कुछ अतिरिक्त सुविधाएँ शामिल की गईं। यह अंततः परित्यक्त LISP70 ड्राफ्ट में विकसित हुआ। 1989 से एम.एल.आई.एस.पी (मेटाएलआईएसपी) योजना के साथ एम-एक्सप्रेशन को मिश्रित करने का और प्रयास था।[7]
एआई मेमो 8 एम-एक्सप्रेशन के लिए पार्सर सामान्य लिस्प में उपलब्ध है, लेकिन मैक्रोज़ के साथ सामना करने में असमर्थता के कारण लेखक इसे एम-एक्सप्रेशन के खिलाफ मामले के रूप में चाहता है।[8]
के के लिए
एपीएल (प्रोग्रामिंग भाषा)-परंपरा में अधिक संक्षिप्त नोटेशन के अलावा, के (प्रोग्रामिंग भाषा) में एम-एक्सप्रेशन भी शामिल है।
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)]
}
आगे का विकास
मैकलिस्प में COLL (1977) लागू किया गया था और यह इन्फिक्स ऑपरेटरों के साथ अल्गोल-जैसे सिंटैक्स को पेश करने के समान लक्ष्य का पालन करता है।[7] यह सशस्त्र भालू आम लिस्प पर काम करने के लिए जाना जाता है।[9]
एक और हालिया (लगभग 2003) संस्करण आई-एक्सप्रेशन है, जो कोष्ठक को स्पष्ट रूप से इंगित करने के लिए ऑफ-साइड नियम का उपयोग करता है, और इस प्रकार कुछ मायनों में एस-एक्सप्रेशन और एम-एक्सप्रेशन के बीच मध्यवर्ती है। I-एक्सप्रेशन को कार्यान्वयन के लिए योजना अनुरोध 49 में स्कीम (प्रोग्रामिंग लैंग्वेज) के सहायक सिंटैक्स के रूप में पेश किया गया था, लेकिन उन्हें व्यापक रूप से नहीं अपनाया गया है।[10]
एक और विकास स्वीट टी-एक्सप्रेशन है, जिसमें बिना किसी पूर्वता के इन्फ़िक्स ऑपरेटर हैं। आई-एक्सप्रेशन की तरह, टी-एक्सप्रेशन एस-एक्सप्रेशन से दूर केवल सरल परिवर्तन है, ताकि सैद्धांतिक रूप से उनका उपयोग किसी भी लिस्प बोली पर किया जा सके और मैक्रोज़ जैसी सुविधाओं में हस्तक्षेप न किया जा सके।[11] अतिरिक्त सिंटैक्स-संबंधी में ऐप्पल की डायलन (प्रोग्रामिंग भाषा) (अल्गोल-जैसे टोकन) और क्लोजर द्वारा अन्य शाब्दिक सिंटैक्स को शामिल करना शामिल है।[7]
टिप्पणियाँ
- ↑ Conditionals take more to explain, as the general conditional system in the language relies on pattern matching and rewriting.[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.
- ↑ Mathematica as a Rewrite Language.
- ↑ 7.0 7.1 7.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.