एस-अभिव्यक्ति

From alpha
Jump to navigation Jump to search
ट्री (डेटा संरचना) डेटा संरचना एस-अभिव्यक्ति का प्रतिनिधित्व करती है (* 2 (+ 3 4))

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

लिस्प के सामान्य कोष्ठक सिंटैक्स (प्रोग्रामिंग भाषाओं) में, एक एस-अभिव्यक्ति को शास्त्रीय रूप से परिभाषित किया गया है[1] जैसा

  1. परमाणु रूप का एक x, या
  2. प्रपत्र की एक अभिव्यक्ति (कंप्यूटर विज्ञान)(x . y) जहाँ x और y S-अभिव्यक्ति हैं।

यह परिभाषा एलआईएसपी द्वारा कोशिकाओं की एक श्रृंखला के रूप में एक सूची के प्रतिनिधित्व को दर्शाती है, जिनमें से प्रत्येक एक क्रमित जोड़ी है। सादे सूचियों में, y अगले सेल (यदि कोई हो) को इंगित करता है, इस प्रकार एक लिंक्ड सूची बनती है। परिभाषा के प्रत्यावर्तन खंड का अर्थ है कि यह प्रतिनिधित्व और एस-अभिव्यक्ति नोटेशन दोनों किसी भी द्विआधारी वृक्ष का प्रतिनिधित्व कर सकते हैं। हालाँकि, प्रतिनिधित्व सैद्धांतिक रूप से परिपत्र संदर्भों की अनुमति दे सकता है, ऐसे मामलों में संरचना बिल्कुल एक पेड़ नहीं है, बल्कि एक चक्रीय ग्राफ है, और शास्त्रीय एस-अभिव्यक्ति नोटेशन में इसका प्रतिनिधित्व नहीं किया जा सकता है जब तक क्रॉस-रेफरेंस के लिए एक कन्वेंशन प्रदान नहीं किया जाता है (एसक्यूएल विदेशी कुंजी, एसजीएमएल/एक्सएमएल आईडीआरईएफ, आदि के अनुरूप)। आधुनिक लिस्प बोलियाँ जैसे सामान्य लिस्प [2] और योजना (प्रोग्रामिंग भाषा)[3] डेटाम लेबल के माध्यम से ऐसे वाक्यविन्यास प्रदान करें, जिसके साथ वस्तुओं को चिह्नित किया जा सकता है, जो फिर कहीं और दोहराया जा सकता है, डुप्लिकेट संरचना के बजाय साझा को इंगित करता है, लिस्प पाठक या प्रारूप (कॉमन लिस्प) को पता लगाने में सक्षम बनाता है और इस प्रकार असीमित पुनरावृत्ति के बिना चक्रों के मूल्यांकन या प्रदर्शन को ट्रिगर करता है

#n=(x y . #n#)

परमाणु की परिभाषा संदर्भ के अनुसार भिन्न-भिन्न होती है; जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा मूल परिभाषा में,[1]यह माना गया था कि अलग-अलग प्रतीक (प्रोग्रामिंग) का एक अनंत सेट मौजूद था, जो कि बड़े लैटिन लिपियों और एकल एम्बेडेड रिक्त स्थान (स्ट्रिंग (कंप्यूटिंग) और संख्यात्मक शाब्दिक (कंप्यूटर प्रोग्रामिंग) का एक उपसमूह) के साथ अंकों के तार के रूप में दर्शाया गया था।

अधिकांश आधुनिक सेक्सपीआर नोटेशन अधिक सामान्य उद्धृत स्ट्रिंग्स (उदाहरण के लिए विराम चिह्न या पूर्ण यूनिकोड सहित) की अनुमति देते हैं, और 2 से अधिक सदस्यों वाली सूचियों का प्रतिनिधित्व करने के लिए संक्षिप्त नोटेशन का उपयोग करते हैं, ताकि

(x y z)

के लिए खड़ा है

(x . (y . (z . NIL)))

NIL सूची का विशेष अंत वस्तु (कंप्यूटर विज्ञान) है (वैकल्पिक रूप से लिखा गया है)। (), जो योजना (प्रोग्रामिंग भाषा) में एकमात्र प्रतिनिधित्व है[4]).

प्रोग्रामिंग भाषाओं के लिस्प परिवार में, एस-एक्सप्रेशन का उपयोग स्रोत कोड और डेटा दोनों का प्रतिनिधित्व करने के लिए किया जाता है। एस-अभिव्यक्तियों के अन्य उपयोग लिस्प-व्युत्पन्न भाषाओं में हैं जैसे दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा, और मार्कअप भाषा के रूप में | इंटरनेट संदेश एक्सेस प्रोटोकॉल और जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) की सामान्य व्यवसाय संचार भाषा जैसे संचार प्रोटोकॉल में मार्क-अप . इसका उपयोग WebAssembly के टेक्स्ट प्रस्तुतिकरण के रूप में भी किया जाता है। सिंटैक्स और समर्थित डेटा प्रकारों का विवरण अलग-अलग भाषाओं में भिन्न होता है, लेकिन इन भाषाओं में सबसे आम विशेषता एस-एक्सप्रेशन और उपसर्ग नोटेशन का उपयोग है।

डेटाटाइप और वाक्यविन्यास

एस-अभिव्यक्ति प्रारूप के कई प्रकार हैं, जो विभिन्न डेटा प्रकारों के लिए विभिन्न प्रकार के सिंटैक्स का समर्थन करते हैं। सबसे व्यापक रूप से समर्थित हैं:

  • सूचियाँ और जोड़े: (1 () (2 . 3) (4))
  • प्रतीक: with-hyphen ?@!$ |a symbol with spaces|
  • तार: "Hello, world!"
  • पूर्णांक: -9876543210
  • दशमलव संख्याएं: -0.0 6.28318 6.022e23

चरित्र # अक्सर वाक्यविन्यास में एक्सटेंशन उपसर्ग करने के लिए उपयोग किया जाता है, उदाहरण के लिए #x10 हेक्साडेसिमल पूर्णांकों के लिए, या #\C पात्रों के लिए.

लिस्प में उपयोग करें

लिस्प में स्रोत कोड का प्रतिनिधित्व करते समय, एस-अभिव्यक्ति का पहला तत्व आमतौर पर एक ऑपरेटर या फ़ंक्शन नाम होता है और किसी भी शेष तत्व को तर्क के रूप में माना जाता है। इसे उपसर्ग संकेतन या पोलिश संकेतन कहा जाता है। उदाहरण के तौर पर, बूलियन तर्क अभिव्यक्ति लिखी गई है 4 == (2 + 2) C (प्रोग्रामिंग भाषा) में, के रूप में दर्शाया गया है (= 4 (+ 2 2)) लिस्प के एस-एक्सपीआर-आधारित उपसर्ग संकेतन में।

जैसा कि ऊपर बताया गया है, परमाणु की सटीक परिभाषा एलआईएसपी जैसी भाषाओं में भिन्न होती है। एक उद्धृत स्ट्रिंग में आम तौर पर एक उद्धरण के अलावा कुछ भी हो सकता है एक गैर-उद्धृत पहचानकर्ता परमाणु में आमतौर पर उद्धरण, रिक्त स्थान वर्ण, कोष्ठक, कोष्ठक, ब्रेसिज़, बैकस्लैश और अर्धविराम के अलावा कुछ भी हो सकता है। किसी भी मामले में, एक निषिद्ध चरित्र को आम तौर पर पूर्ववर्ती बैकस्लैश से बचकर शामिल किया जा सकता है। यूनिकोड समर्थन भिन्न होता है।

एस-एक्सपीआर परिभाषा का पुनरावर्ती मामला पारंपरिक रूप से विपक्ष कोशिकाओं का उपयोग करके कार्यान्वित किया जाता है।

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

डेटा एस-अभिव्यक्ति के उदाहरण

नेस्टेड सूचियों को एस-एक्सप्रेशन के रूप में लिखा जा सकता है: ((milk juice) (honey marmalade)) एक दो-तत्व एस-अभिव्यक्ति है जिसके तत्व भी दो-तत्व एस-अभिव्यक्ति हैं। लिस्प (और इस लेख) में प्रयुक्त व्हाइटस्पेस-पृथक नोटेशन विशिष्ट है। लाइन ब्रेक (न्यूलाइन वर्ण) आमतौर पर विभाजक के रूप में योग्य होते हैं।

यह एस-अभिव्यक्ति (गज़दार/मेलिश, लिस्प में प्राकृतिक भाषा प्रसंस्करण) के रूप में लिखी गई अंग्रेजी के एक छोटे उपसमूह के लिए एक सरल संदर्भ-मुक्त व्याकरण है, जहां एस = वाक्य, एनपी = संज्ञा वाक्यांश, वीपी = क्रिया वाक्यांश, वी = क्रिया :

(((S) (NP VP))
 ((VP) (V))
 ((VP) (V NP))
 ((V) died)
 ((V) employed)
 ((NP) nurses)
 ((NP) patients)
 ((NP) Medicenter)
 ((NP) "Dr Chan"))


स्रोत कोड एस-अभिव्यक्ति का उदाहरण

प्रोग्राम कोड को एस-एक्सप्रेशन में लिखा जा सकता है, आमतौर पर उपसर्ग नोटेशन का उपयोग करके।

सामान्य लिस्प में उदाहरण:

(defun factorial (x)
   (if (zerop x)
       1
       (* x (factorial (- x 1)))))

रीड फ़ंक्शन का उपयोग करके एस-एक्सप्रेशन को लिस्प में पढ़ा जा सकता है। रीड एस-अभिव्यक्ति के पाठ्य प्रतिनिधित्व को पढ़ता है और लिस्प डेटा लौटाता है। फ़ंक्शन प्रिंट का उपयोग एस-अभिव्यक्ति को आउटपुट करने के लिए किया जा सकता है। आउटपुट को तब रीड फ़ंक्शन के साथ पढ़ा जा सकता है, जब सभी मुद्रित डेटा ऑब्जेक्ट में पढ़ने योग्य प्रतिनिधित्व होता है। लिस्प में संख्याओं, स्ट्रिंग्स, प्रतीकों, सूचियों और कई अन्य डेटा प्रकारों के लिए पठनीय प्रतिनिधित्व हैं। PPRINT फ़ंक्शन का उपयोग करके प्रोग्राम कोड को सुंदर मुद्रित S-अभिव्यक्ति के रूप में स्वरूपित किया जा सकता है (नोट: दो Ps के साथ, सुंदर-प्रिंट के लिए संक्षिप्त)।

लिस्प प्रोग्राम वैध एस-एक्सप्रेशन हैं, लेकिन सभी एस-एक्सप्रेशन वैध लिस्प प्रोग्राम नहीं हैं। (1.0 + 3.1) एक वैध एस-अभिव्यक्ति है, लेकिन एक वैध लिस्प प्रोग्राम नहीं है, क्योंकि लिस्प उपसर्ग नोटेशन का उपयोग करता है और एक फ़्लोटिंग पॉइंट नंबर (यहां 1.0) एक ऑपरेशन (अभिव्यक्ति का पहला तत्व) के रूप में मान्य नहीं है।

एक एकल उद्धरण चिह्न से पहले एक एस-अभिव्यक्ति, जैसा कि 'x, लिस्प (प्रोग्रामिंग भाषा)#स्व-मूल्यांकन रूपों और उद्धरण|उद्धृत एस-अभिव्यक्ति के लिए वाक्यात्मक चीनी है, इस मामले में (quote x).

पार्सिंग

एस-एक्सप्रेशन की तुलना अक्सर एक्सएमएल से की जाती है: मुख्य अंतर यह है कि एस-एक्सप्रेशन में रोकथाम का सिर्फ एक रूप होता है, बिंदीदार जोड़ी, जबकि एक्सएमएल टैग में सरल गुण, अन्य टैग या सीडीएटीए शामिल हो सकते हैं, प्रत्येक अलग-अलग सिंटैक्स का उपयोग करते हैं। सरल उपयोग के मामलों के लिए, एस-एक्सप्रेशन XML की तुलना में सरल हैं, लेकिन अधिक उन्नत उपयोग के मामलों के लिए, XML में एक क्वेरी भाषा है जिसे XPath कहा जाता है, XML डेटा के प्रबंधन को सरल बनाने के लिए कई उपकरण और तृतीय पक्ष लाइब्रेरी हैं।

मानकीकरण

कुछ लिस्प-व्युत्पन्न प्रोग्रामिंग भाषाओं के मानकों में उनके एस-अभिव्यक्ति सिंटैक्स के लिए एक विनिर्देश शामिल है। इनमें कॉमन लिस्प (ANSI मानक दस्तावेज़ ANSI INCITS 226-1994 (R2004)), स्कीम (प्रोग्रामिंग भाषा) (R5RS और R6RS) शामिल हैं[5]), और ISLISP

रिवेस्ट का संस्करण

मई 1997 में, रॉन रिवेस्ट ने एक इंटरनेट ड्राफ्ट प्रस्तुत किया[6] टिप्पणियों के अनुरोध के रूप में प्रकाशन के लिए विचार किया जाएगा। ड्राफ्ट में लिस्प एस-एक्सप्रेशन पर आधारित एक सिंटैक्स को परिभाषित किया गया है, लेकिन इसका उद्देश्य विशेष रूप से प्रोग्रामिंग के बजाय सामान्य प्रयोजन डेटा भंडारण और विनिमय (XML के समान) है। इसे कभी भी RFC के रूप में अनुमोदित नहीं किया गया था, लेकिन तब से इसे अन्य RFC (जैसे RFC 2693) और कई अन्य प्रकाशनों द्वारा उद्धृत और उपयोग किया गया है।[7] यह मूल रूप से सरल सार्वजनिक कुंजी अवसंरचना में उपयोग के लिए था।

रिवेस्ट का प्रारूप एस-एक्सप्रेशन को या तो एक ऑक्टेट-स्ट्रिंग (बाइट्स की एक श्रृंखला) या अन्य एस-एक्सप्रेशन की एक सीमित सूची के रूप में परिभाषित करता है। यह इस संरचना को व्यक्त करने के लिए तीन इंटरचेंज प्रारूपों का वर्णन करता है। एक उन्नत परिवहन है, जो स्वरूपण के मामले में बहुत लचीला है, और वाक्यात्मक रूप से लिस्प-शैली अभिव्यक्तियों के समान है, लेकिन वे समान नहीं हैं। उन्नत परिवहन, उदाहरण के लिए, ऑक्टेट-स्ट्रिंग्स को शब्दशः प्रदर्शित करने की अनुमति देता है (स्ट्रिंग की लंबाई एक कोलन और संपूर्ण कच्ची स्ट्रिंग के बाद), एक उद्धृत रूप जो एस्केप वर्णों, हेक्साडेसिमल, बेस 64 की अनुमति देता है, या यदि यह मिलता है तो सीधे टोकन के रूप में रखा जाता है कुछ शर्तें। (रिवेस्ट के टोकन लिस्प टोकन से इस मायने में भिन्न हैं कि पहले वाले केवल सुविधा और सौंदर्यशास्त्र के लिए हैं, और अन्य स्ट्रिंग्स की तरह ही व्यवहार किए जाते हैं, जबकि बाद वाले का विशिष्ट वाक्यात्मक अर्थ होता है।)

रिवेस्ट का मसौदा डिजिटल हस्ताक्षर उद्देश्यों के लिए विहित एस-अभिव्यक्ति को परिभाषित करता है। इसका उद्देश्य कॉम्पैक्ट होना, पार्स करना आसान होना और किसी भी अमूर्त एस-अभिव्यक्ति के लिए अद्वितीय होना है। यह केवल शब्दशः स्ट्रिंग्स की अनुमति देता है, और बाहरी स्ट्रिंग्स को स्वरूपित करने के लिए व्हाइटस्पेस को प्रतिबंधित करता है। अंत में बुनियादी परिवहन प्रतिनिधित्व है, जो या तो कैनोनिकल रूप है या बेस 64 के समान एन्कोडेड है और ब्रैकेट से घिरा हुआ है, बाद वाले का उद्देश्य कैनोनिक रूप से एन्कोडेड एस-एक्सप्रेशन को एक सिस्टम में सुरक्षित रूप से ट्रांसपोर्ट करना है जो रिक्ति को बदल सकता है (उदाहरण के लिए एक ईमेल सिस्टम जो इसमें 80-वर्ण-चौड़ी रेखाएं हैं और इससे अधिक लंबी कोई भी पंक्ति शामिल है)।

इस प्रारूप को SPKI के बाहर उपयोग के लिए व्यापक रूप से अनुकूलित नहीं किया गया है (कुछ उपयोगकर्ता GnuPG, libgcrypt, Nettle (क्रिप्टोग्राफ़िक लाइब्रेरी), और GNU lsh हैं)। रिवेस्ट का एस-एक्सप्रेशन वेब पेज एक पार्सर और जनरेटर (मेरा लाइसेंस के तहत उपलब्ध) के लिए सी (प्रोग्रामिंग भाषा) स्रोत कोड प्रदान करता है, जिसे अनुकूलित और अन्य कार्यक्रमों में एम्बेड किया जा सकता है।[8] इसके अलावा, प्रारूप को स्वतंत्र रूप से लागू करने पर कोई प्रतिबंध नहीं है।

यह भी देखें

संदर्भ

  1. 1.0 1.1 John McCarthy (1960/2006). Recursive functions of symbolic expressions Archived 2004-02-02 at the Wayback Machine. Originally published in Communications of the ACM.
  2. "Common Lisp HyperSpec: 22.4 - The Printer Dictionary: *PRINT-CIRCLE*". 2018-12-28.
  3. "Revised7 Report on the Algorithmic Language‌ Scheme: Section 2.4: Datum Labels" (PDF). 2013-07-06.
  4. "Revised^5 Report on the Algorithmic Language Scheme". schemers.org.
  5. Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; Findler, Robby; Matthews, Jacob (Aug 12, 2009). "Revised6 Report on the Algorithmic Language Scheme". Journal of Functional Programming. 19 (S1): 1–301. CiteSeerX 10.1.1.372.373. doi:10.1017/S0956796809990074.
  6. S-expressions, Network Working Group, Internet Draft, Expires November 4, 1997 - R. Rivest, May 4, 1997 draft-rivest-sexp-00.txt, Ronald L. Rivest, CSAIL MIT website
  7. rivest sexp, Google Scholar (search)
  8. "SEXP (एस-एक्सप्रेशन)". people.csail.mit.edu.


बाहरी संबंध