एमएल (प्रोग्रामिंग भाषा): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|General purpose functional programming language}}
{{Short description|General purpose functional programming language}}
{{Other uses|ML (disambiguation){{!}}एमएल}}
{{Infobox programming language
{{Infobox programming language
| name                  = ML
| name                  = एमएल
| logo                  =
| logo                  =
| paradigm              = [[Multi-paradigm programming language|Multi-paradigm]]: [[Functional programming|functional]],  
| paradigm              = [[मल्टी-पैराडाइम प्रोग्रामिंग लैंग्वेज|मल्टी-पैराडाइम]]: [[फंक्शनल प्रोग्रामिंग|फंक्शनल]],
[[Generic programming|generic]], [[Imperative programming|imperative]]
[[जेनेरिक प्रोग्रामिंग|जेनेरिक]], [[आवश्यक प्रोग्रामिंग|अनिवार्य]]
| year                  = {{start date and age|1973}}
| year                  = {{प्रारंभ तिथि और आयु|1973}}
| designer              = [[Robin Milner]] and others at the [[University of Edinburgh]]
| designer              = [[रॉबिन मिलनर]] और [[एडिनबर्ग विश्वविद्यालय]] में अन्य
| developer              =
| developer              =
| latest release version =
| latest release version =
| latest release date    =
| latest release date    =
| typing                = [[Type inference|Inferred]], [[static typing|static]], [[strong typing|strong]]
| typing                = [[प्रकार का अनुमान|अनुमानित]], [[स्थैतिक टाइपिंग|स्थिर]], [[मजबूत टाइपिंग|मजबूत]]
| implementations        =
| implementations        =
| dialects              = [[OCaml]], [[Standard ML]], [[F Sharp (programming language)|F#]]
| dialects              = [[ओकैमल]], [[मानक एमएल]], [[एफ शार्प (प्रोग्रामिंग भाषा)|एफ]]
| influenced by          = [[ISWIM]]
| influenced by          = [[ईस्वीं]]
| influenced            = [[Clojure]], [[Coq]], [[Cyclone (programming language)|Cyclone]], [[C++]], [[Elm (programming language)|Elm]], [[F Sharp (programming language)|F#]], [[F* (programming language)|F*]], [[Haskell (programming language)|Haskell]], [[Idris (programming language)|Idris]], [[Kotlin (programming language)|Kotlin]], [[Miranda (programming language)|Miranda]], [[Nemerle]], [[OCaml]], [[Opa (programming language)|Opa]], [[Erlang (programming language)|Erlang]], [[Rust (programming language)|Rust]], [[Scala (programming language)|Scala]], [[Standard ML]]
| influenced            = [[Clojure]], [[Coq]], [[Cyclone (programming language)|Cyclone]], [[C++]], [[Elm (programming language)|Elm]], [[F Sharp (programming language)|F#]], [[F* (programming language)|F*]], [[Haskell (programming language)|Haskell]], [[Idris (programming language)|Idris]], [[Kotlin (programming language)|Kotlin]], [[Miranda (programming language)|Miranda]], [[Nemerle]], [[OCaml]], [[Opa (programming language)|Opa]], [[Erlang (programming language)|Erlang]], [[Rust (programming language)|Rust]], [[Scala (programming language)|Scala]], [[Standard ML]]
| operating system      =
| operating system      =
Line 20: Line 19:
| website                =
| website                =
}}
}}
एमएल (मेटा लैंग्वेज) [[सामान्य प्रयोजन प्रोग्रामिंग भाषा|सामान्य प्रयोजन]] की [[कार्यात्मक प्रोग्रामिंग]] भाषा होती है | यह पॉलिमॉर्फिक हिंडले-मिलनर टाइप सिस्टम के उपयोग के लिए जाना जाता है, जो स्पष्ट प्रकार के एनोटेशन की आवश्यकता के बिना स्वचालित रूप से अधिकांश [[अभिव्यक्ति (प्रोग्रामिंग)]] के [[डेटा प्रकार]] को असाइन करता है, और टाइप सुरक्षा सुनिश्चित करता है।{{snd}}औपचारिक प्रमाण है कि अच्छी तरह से टाइप किया गया एमएल प्रोग्राम रनटाइम प्रकार की त्रुटियों का कारण नहीं बनता है।<ref>Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.</ref> एमएल फ़ंक्शन तर्कों, [[कचरा संग्रह (कंप्यूटर विज्ञान)|गार्बेज संग्रह (कंप्यूटर विज्ञान)]], [[अनिवार्य प्रोग्रामिंग]], [[कॉल-टू-मूल्य से]] और [[करी]]इंग के लिए पैटर्न मिलान प्रदान करता है। यह प्रोग्रामिंग भाषा अनुसंधान में अत्यधिक उपयोग किया जाता है और प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थों का उपयोग करके पूरी तरह से निर्दिष्ट और सत्यापित होने वाली कुछ भाषाओं में से है। इसके प्रकार और पैटर्न मिलान इसे अच्छी तरह से अनुकूल बनाते हैं और सामान्यतः अन्य औपचारिक भाषाओं जैसे [[संकलक लेखन]], स्वचालित प्रमेय सिद्ध करने और [[औपचारिक सत्यापन]] में काम करने के लिए उपयोग किया जाता है।
'''एमएल (मेटा लैंग्वेज)''' [[सामान्य प्रयोजन प्रोग्रामिंग भाषा|सामान्य प्रयोजन]] की [[कार्यात्मक प्रोग्रामिंग]] भाषा होती है | यह पॉलिमॉर्फिक हिंडले-मिलनर टाइप प्रणाली के उपयोग के लिए जाना जाता है, जो स्पष्ट प्रकार के एनोटेशन की आवश्यकता के बिना स्वचालित रूप से अधिकांश [[अभिव्यक्ति (प्रोग्रामिंग)]] के [[डेटा प्रकार]] को असाइन करता है, और टाइप सुरक्षा सुनिश्चित करता है। औपचारिक प्रमाण है कि उत्तम प्रकार से टाइप किया गया एमएल प्रोग्राम रनटाइम प्रकार की त्रुटियों का कारण नहीं बनता है।<ref>Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.</ref> एमएल फ़ंक्शन तर्कों, [[कचरा संग्रह (कंप्यूटर विज्ञान)|गार्बेज संग्रह (कंप्यूटर विज्ञान)]], [[अनिवार्य प्रोग्रामिंग]], [[कॉल-टू-मूल्य से]] और [[करी|करीइंग]] के लिए पैटर्न मिलान प्रदान करता है। यह प्रोग्रामिंग भाषा अनुसंधान में अत्यधिक उपयोग किया जाता है और यह प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थों का उपयोग करके पूर्ण रूप से निर्दिष्ट और सत्यापित होने वाली कुछ भाषाओं में से है। इसके प्रकार पैटर्न मिलान इसे उत्तम उपाय से अनुकूल बनाते हैं और सामान्यतः अन्य औपचारिक भाषाओं जैसे [[संकलक लेखन]], स्वचालित प्रमेय सिद्ध करने और [[औपचारिक सत्यापन]] में काम करने के लिए उपयोग किया जाता है।


== अवलोकन ==
== अवलोकन ==
एमएल की विशेषताओं में कॉल-बाय-वैल्यू [[मूल्यांकन रणनीति]], प्रथम श्रेणी के कार्य, गार्बेज संग्रह के माध्यम से स्वचालित मेमोरी प्रबंधन, [[पैरामीट्रिक बहुरूपता]], प्रकार प्रणाली स्टेटिक टाइपिंग, प्रकार अनुमान, [[बीजगणितीय डेटा प्रकार]], [[पैटर्न मिलान]] और अपवाद हैंडलिंग सम्मलित हैं। ML स्कोप (कंप्यूटर साइंस) # लेक्सिकल स्कोपिंग नियमों का उपयोग करता है।<ref>{{cite book |last1=Milner |first1=Robin |last2=Tofte |first2=Mads |title=Commentary on Standard ML |date=1991 |publisher=The MIT Press |isbn=0-262-63137-7 |pages=35-36|chapter=4.1 Contexts, environments and scope}}</ref>
एमएल की विशेषताओं में कॉल-बाय-वैल्यू [[मूल्यांकन रणनीति]], प्रथम श्रेणी के कार्य, गार्बेज संग्रह के माध्यम से स्वचालित मेमोरी प्रबंधन, [[पैरामीट्रिक बहुरूपता]], प्रकार प्रणाली स्टेटिक टाइपिंग, प्रकार अनुमान, [[बीजगणितीय डेटा प्रकार]], [[पैटर्न मिलान]] और अपवाद हैंडलिंग सम्मलित हैं। एमएल स्कोप (कंप्यूटर साइंस) लेक्सिकल स्कोपिंग नियमों का उपयोग करता है।<ref>{{cite book |last1=Milner |first1=Robin |last2=Tofte |first2=Mads |title=Commentary on Standard ML |date=1991 |publisher=The MIT Press |isbn=0-262-63137-7 |pages=35-36|chapter=4.1 Contexts, environments and scope}}</ref>
एमएल को एक अशुद्ध कार्यात्मक भाषा के रूप में संदर्भित किया जा सकता है, क्योंकि यद्यपि यह कार्यात्मक प्रोग्रामिंग को प्रोत्साहित करती है, यह साइड-इफ़ेक्ट (कंप्यूटर विज्ञान) की अनुमति देती है।<ref>{{cite book |last1=Sebesta |first1=Robert |title=Concepts of Programming Languages |date=1999 |publisher=Addison-Westley |isbn=0-201-38596-1 |page=54 |edition=4th}}</ref> ([[लिस्प (प्रोग्रामिंग भाषा)]] जैसी भाषाओं की तरह, लेकिन [[हास्केल (प्रोग्रामिंग भाषा)]] जैसी [[विशुद्ध रूप से कार्यात्मक भाषा]] के विपरीत)। अधिकांश प्रोग्रामिंग भाषाओं की तरह, एमएल [[उत्सुक मूल्यांकन]] का उपयोग करता है, जिसका अर्थ है कि सभी उप-अभिव्यक्तियों का हमेशा मूल्यांकन किया जाता है, हालांकि क्लोजर (कंप्यूटर विज्ञान) के उपयोग के माध्यम से [[आलसी मूल्यांकन]] प्राप्त किया जा सकता है। इस प्रकार हास्केल की तरह अनंत धाराएँ बना और उपयोग कर सकते हैं, लेकिन उनकी अभिव्यक्ति अप्रत्यक्ष है।
एमएल को अशुद्ध कार्यात्मक भाषा के रूप में संदर्भित किया जा सकता है, क्योंकि यह कार्यात्मक प्रोग्रामिंग को प्रोत्साहित करती है, और यह साइड-इफ़ेक्ट (कंप्यूटर विज्ञान) की अनुमति देती है<ref>{{cite book |last1=Sebesta |first1=Robert |title=Concepts of Programming Languages |date=1999 |publisher=Addison-Westley |isbn=0-201-38596-1 |page=54 |edition=4th}}</ref> (जैसे कि [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प प्रोग्रामिंग भाषा]] लेकिन [[हास्केल (प्रोग्रामिंग भाषा)]] जैसी [[विशुद्ध रूप से कार्यात्मक भाषा]] के विपरीत)। अधिकांश प्रोग्रामिंग भाषाओं की जैसे, एमएल [[उत्सुक मूल्यांकन]] का उपयोग करता है, जिसका अर्थ है कि सभी उप-अभिव्यक्तियों का सदैव मूल्यांकन किया जाता है, चूँकि क्लोजर (कंप्यूटर विज्ञान) के उपयोग के माध्यम से [[आलसी मूल्यांकन|मंद मूल्यांकन]] प्राप्त किया जा सकता है। इस प्रकार हास्केल के जैसे अनंत धाराएँ बना और उपयोग कर सकते हैं, लेकिन उनकी अभिव्यक्ति अप्रत्यक्ष होती है।


एमएल की ताकत ज्यादातर भाषा डिजाइन और हेरफेर (संकलक, विश्लेषक, प्रमेय सिद्ध) में लागू होती है, लेकिन यह एक सामान्य उद्देश्य वाली भाषा है जिसका उपयोग जैव सूचना विज्ञान और वित्तीय प्रणालियों में भी किया जाता है।
एमएल की दृढ़ता अधिकतर भाषा डिजाइन और परिवर्तन (संकलक, विश्लेषक, प्रमेय सिद्ध) में प्रारम्भ होती है, लेकिन यह सामान्य उद्देश्य वाली भाषा है जिसका उपयोग जैव सूचना विज्ञान और वित्तीय प्रणालियों में भी किया जाता है।
 
एमएल को [[एडिनबर्ग विश्वविद्यालय]] में 1970 के दशक की शुरुआत में [[रॉबिन मिलनर]] और अन्य द्वारा विकसित किया गया था।<ref name="Gordon1996">{{cite web | last = Gordon | first = Michael J. C. | author-link = Michael J. C. Gordon | year=1996 | title = From LCF to HOL: a short history | url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | access-date = 2007-10-11}}</ref> और इसका सिंटैक्स [[ISWIM]] से प्रेरित है। ऐतिहासिक रूप से, ML की कल्पना [[संगणनीय कार्यों के लिए तर्क]] (जिसकी भाषा, plambda, [[पहले क्रम का तर्क]] का संयोजन | फ़र्स्ट-ऑर्डर प्रेडिकेट कैलकुलस और सिंपल-टाइप्ड पॉलीमॉर्फिज़्म (कंप्यूटर साइंस) [[लैम्ब्डा कैलकुलस]]) के लिए प्रूफ टैक्टिक्स विकसित करने के लिए की गई थी, में ML था इसकी धातुभाषा के रूप में)।
 
आज एमएल परिवार में कई भाषाएं हैं; तीन सबसे प्रमुख मानक ML (SML), [[OCaml]] और F Sharp (प्रोग्रामिंग भाषा)|F# हैं। एमएल के विचारों ने कई अन्य भाषाओं को प्रभावित किया है, जैसे हास्केल (प्रोग्रामिंग भाषा), साइक्लोन (प्रोग्रामिंग भाषा), [[नेमर्ले]],<ref>{{Citation |title=Programming language for "special forces" of developers |publisher=Nemerle Project Team |publication-place=Russian Software Development Network |url=http://nemerle.org/About |access-date=January 24, 2021}}</ref> [[एटीएस (प्रोग्रामिंग भाषा)]], और [[एल्म (प्रोग्रामिंग भाषा)]]।<ref>{{cite book|last1=Tate|first1=Bruce A.|last2=Daoud|first2=Fred|last3=Dees|first3=Ian|last4=Moffitt|first4=Jack|title=Seven More Languages in Seven Weeks|date=2014|publisher=The Pragmatic Programmers, LLC|isbn=978-1-941222-15-7|pages=97, 101|edition=Book version: P1.0-November 2014|chapter=3. Elm|quote=On page 101, Elm creator Evan Czaplicki says: 'I tend to say "Elm is an ML-family language" to get at the shared heritage of all these languages.' ["these languages" is referring to Haskell, OCaml, SML, and F#.]}}</ref>


एमएल को [[एडिनबर्ग विश्वविद्यालय]] में 1970 के दशक के प्रारम्भ में [[रॉबिन मिलनर]] और अन्य द्वारा विकसित किया गया था <ref name="Gordon1996">{{cite web | last = Gordon | first = Michael J. C. | author-link = Michael J. C. Gordon | year=1996 | title = From LCF to HOL: a short history | url = http://www.cl.cam.ac.uk/~mjcg/papers/HolHistory.html | access-date = 2007-10-11}}</ref> और इसका सिंटैक्स [[ISWIM|आईएसडब्लूआईएम]] से प्रेरित है। ऐतिहासिक रूप से, एमएल की कल्पना को [[संगणनीय कार्यों के लिए तर्क]] (जिसकी भाषा, प्लम्बडा, [[पहले क्रम का तर्क]] का संयोजन फ़र्स्ट-ऑर्डर प्रेडिकेट कैलकुलस और सिंपल-टाइप्ड पॉलीमॉर्फिज़्म (कंप्यूटर साइंस) [[लैम्ब्डा कैलकुलस]]) के लिए प्रूफ टैक्टिक्स विकसित करने के लिए की गई थी)।


एमएल परिवार में कई भाषाएं हैं; तीन सबसे प्रमुख मानक एसएमएल, [[OCaml|ओसीएमएल]] और एफ शार्प (प्रोग्रामिंग भाषा) हैं। एमएल के विचारों ने कई अन्य भाषाओं, जैसे हास्केल (प्रोग्रामिंग भाषा), साइक्लोन (प्रोग्रामिंग भाषा), [[नेमर्ले]],<ref>{{Citation |title=Programming language for "special forces" of developers |publisher=Nemerle Project Team |publication-place=Russian Software Development Network |url=http://nemerle.org/About |access-date=January 24, 2021}}</ref> [[एटीएस (प्रोग्रामिंग भाषा)]], और [[एल्म (प्रोग्रामिंग भाषा)]] को प्रभावित किया है।<ref>{{cite book|last1=Tate|first1=Bruce A.|last2=Daoud|first2=Fred|last3=Dees|first3=Ian|last4=Moffitt|first4=Jack|title=Seven More Languages in Seven Weeks|date=2014|publisher=The Pragmatic Programmers, LLC|isbn=978-1-941222-15-7|pages=97, 101|edition=Book version: P1.0-November 2014|chapter=3. Elm|quote=On page 101, Elm creator Evan Czaplicki says: 'I tend to say "Elm is an ML-family language" to get at the shared heritage of all these languages.' ["these languages" is referring to Haskell, OCaml, SML, and F#.]}}</ref>
== उदाहरण ==
== उदाहरण ==
निम्नलिखित उदाहरण मानक एमएल के सिंटैक्स का उपयोग करते हैं। अन्य ML बोलियाँ जैसे OCaml और F# छोटे-छोटे तरीकों से भिन्न हैं।
निम्नलिखित उदाहरण मानक एमएल के सिंटैक्स का उपयोग करते हैं। अन्य एमएल भाषाएँ जैसे ओसीएमएल और F छोटे-छोटे विधि से भिन्न हैं।


=== [[कारख़ाने का]] ===
=== [[कारख़ाने का|फ़ैक्टोरियल]] ===
शुद्ध एमएल के रूप में व्यक्त फैक्टोरियल फ़ंक्शन:
शुद्ध एमएल के रूप में व्यक्त फैक्टोरियल फ़ंक्शन:


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
  fun fac (0 : int) : int = 1
fun fac (0 : int) : int = 1
  | एफएसी (एन: इंट): इंट = एन * एफएसी (एन - 1)
</वाक्यविन्यास हाइलाइट>
 
यह फैक्टोरियल को एक पुनरावर्ती फ़ंक्शन के रूप में वर्णित करता है, जिसमें एकल समाप्ति आधार केस होता है। यह गणित की पाठ्यपुस्तकों में पाए जाने वाले फैक्टोरियल्स के विवरण के समान है। अधिकांश एमएल कोड सुविधा और सिंटैक्स में गणित के समान है।
 
दिखाई गई परिभाषा का भाग वैकल्पिक है, और इस फ़ंक्शन के प्रकारों का वर्णन करता है। संकेतन E : t को व्यंजक E के प्रकार t के रूप में पढ़ा जा सकता है। उदाहरण के लिए, तर्क n को टाइप पूर्णांक (int) असाइन किया गया है, और fac (n: int), पूर्णांक n पर fac लगाने का परिणाम भी प्रकार पूर्णांक है। एक पूरे के रूप में फ़ंक्शन फ़ैक में पूर्णांक से पूर्णांक (int -> int) तक टाइप फ़ंक्शन होता है, अर्थात, एक पूर्णांक को एक तर्क के रूप में स्वीकार करता है और एक पूर्णांक परिणाम देता है। प्रकार के अनुमान के लिए धन्यवाद, प्रकार के एनोटेशन को छोड़ा जा सकता है और संकलक द्वारा प्राप्त किया जाएगा। टाइप एनोटेशन के बिना पुनर्लेखित, उदाहरण इस तरह दिखता है:
 
<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
फन फैक 0 = 1
  | एफएसी एन = एन * एफएसी (एन - 1)
</वाक्यविन्यास हाइलाइट>
 
फ़ंक्शन पैटर्न मिलान पर भी निर्भर करता है, जो एमएल प्रोग्रामिंग का एक महत्वपूर्ण हिस्सा है। ध्यान दें कि किसी फ़ंक्शन के पैरामीटर आवश्यक रूप से कोष्ठक में नहीं हैं बल्कि रिक्त स्थान द्वारा अलग किए गए हैं। जब फ़ंक्शन का तर्क 0 (शून्य) होता है तो यह पूर्णांक 1 (एक) लौटाएगा। अन्य सभी मामलों के लिए दूसरी पंक्ति की कोशिश की जाती है। यह [[रिकर्सन (कंप्यूटर विज्ञान)]] है, और बेस केस तक पहुंचने तक फ़ंक्शन को फिर से निष्पादित करता है।


फैक्टोरियल फ़ंक्शन के इस कार्यान्वयन को समाप्त करने की गारंटी नहीं है, क्योंकि एक नकारात्मक तर्क पुनरावर्ती कॉल की एक [[अनंत अवरोही श्रृंखला]] का कारण बनता है। एक अधिक मजबूत कार्यान्वयन पुनरावर्ती से पहले एक गैर-नकारात्मक तर्क की जांच करेगा, इस प्रकार है:
  | fac (n : int) : int = n * fac (n - 1)


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
यह फैक्टोरियल को पुनरावर्ती फ़ंक्शन के रूप में वर्णित करता है, जिसमें एकल समाप्ति आधार केस होता है। यह गणित की पाठ्यपुस्तकों में पाए जाने वाले फैक्टोरियल्स के विवरण के समान होता है। अधिकांश एमएल कोड सुविधा और सिंटैक्स में गणित के समान होते है।
मजेदार तथ्य एन = चलो
  फन फैक 0 = 1
    | एफएसी एन = एन * एफएसी (एन - 1)
  में
    अगर (n < 0) तो डोमेन और पहलू n बढ़ाएँ
  अंत
</वाक्यविन्यास हाइलाइट>


समस्याग्रस्त मामला (जब n ऋणात्मक होता है) ML की अपवाद प्रणाली के उपयोग को प्रदर्शित करता है।
दिखाई गई परिभाषा का भाग वैकल्पिक है, और इस फ़ंक्शन के प्रकारों का वर्णन करता है। संकेतन E: t को व्यंजक E के प्रकार t के रूप में पढ़ा जा सकता है। उदाहरण के लिए, तर्क n को टाइप पूर्णांक (int) असाइन किया गया है, और fac (n: int), पूर्णांक n पर fac लगाने का परिणाम भी प्रकार पूर्णांक है। पूर्ण के रूप में फ़ंक्शन फ़ैक में पूर्णांक से पूर्णांक (int -> int) तक टाइप फ़ंक्शन होता है, अर्थात, पूर्णांक को तर्क के रूप में स्वीकार करता है और पूर्णांक परिणाम देता है। टाइप के अनुमान के लिए धन्यवाद, टाइप के एनोटेशन को छोड़ा जा सकता है और संकलक द्वारा प्राप्त किया जाएगा। टाइप एनोटेशन के बिना पुनर्लेखित, उदाहरण इस प्रकार दिखता है:
  fun fac 0 = 1


इसके आंतरिक लूप को [[टेल कॉल]] के रूप में लिखकर फ़ंक्शन को और बेहतर बनाया जा सकता है, जैसे कि [[कॉल स्टैक]] को फ़ंक्शन कॉल की संख्या के अनुपात में बढ़ने की आवश्यकता नहीं है। यह आंतरिक फ़ंक्शन में एक अतिरिक्त, संचायक, पैरामीटर जोड़कर प्राप्त किया जाता है। अंत में, हम पहुंचे
  | fac n = n * fac (n - 1)
फ़ंक्शन पैटर्न मिलान पर भी निर्भर करता है, जो एमएल प्रोग्रामिंग का महत्वपूर्ण भाग है। ध्यान दें कि किसी फ़ंक्शन के पैरामीटर आवश्यक रूप से कोष्ठक में नहीं हैं बल्कि रिक्त स्थान द्वारा अलग किए गए हैं। जब फ़ंक्शन का तर्क 0 (शून्य) होता है तो यह पूर्णांक 1 (एक) लौटाएगा। अन्य सभी विषयो के लिए दूसरी पंक्ति की कोशिश की जाती है। यह [[रिकर्सन (कंप्यूटर विज्ञान)]] है, और बेस केस तक पहुंचने तक फ़ंक्शन को फिर से निष्पादित करता है।


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
फैक्टोरियल फ़ंक्शन के इस कार्यान्वयन को समाप्त करने की गारंटी नहीं है, क्योंकि नकारात्मक तर्क पुनरावर्ती कॉल की [[अनंत अवरोही श्रृंखला]] का कारण बनता है। अधिक स्थिर कार्यान्वयन पुनरावर्ती से पहले गैर-नकारात्मक तर्क का अन्वेषण करेगा, जो इस प्रकार है:
मजेदार तथ्य एन = चलो
   fun fact n = let
  मज़ा एफ ए सी 0 ए सी सी = ए सी सी
    | एफएसी एन एसीसी = एफएसी (एन - 1) (एन * एसीसी)
   में
    if (n < 0) तो Domain else fac n 1 बढ़ाएं
  अंत
</वाक्यविन्यास हाइलाइट>


=== उलटी सूची ===
  fun fac 0 = 1
निम्न फ़ंक्शन किसी सूची में तत्वों को उलट देता है। अधिक सटीक रूप से, यह एक नई सूची देता है जिसके तत्व दी गई सूची की तुलना में उल्टे क्रम में होते हैं।
    | fac n = n * fac (n - 1)
  in
    if (n < 0) then raise Domain else fac n
  end
समस्याग्रस्त विषय (जब n ऋणात्मक होता है) एमएल की अपवाद प्रणाली के उपयोग को प्रदर्शित करता है।


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
इसके आंतरिक लूप को [[टेल कॉल]] के रूप में लिखकर फ़ंक्शन को और अच्छा बनाया जा सकता है, जैसे कि [[कॉल स्टैक]] को फ़ंक्शन कॉल की संख्या के अनुपात में बढ़ने की आवश्यकता नहीं है। यह आंतरिक फ़ंक्शन में अतिरिक्त, संचायक, पैरामीटर जोड़कर प्राप्त किया जाता है। अंत में, हम पहुंचे
फन रिवर्स [] = []
   fun fact n = let
   | रिवर्स (x :: xs) = (रिवर्स xs) @ [x]
</वाक्यविन्यास हाइलाइट>


  fun fac 0 acc = acc
    | fac n acc = fac (n - 1) (n * acc)
  in
    if (n < 0) then raise Domain else fac n 1
  end
=== उत्क्रम सूची ===
निम्न फ़ंक्शन किसी सूची में तत्वों को परिवर्तित कर देता है। अधिक त्रुटिहीन रूप से, यह नई सूची देता है जिसके तत्व दी गई सूची की तुलना में विपरीत क्रम में होते हैं।
  fun 'a reverse xs : 'a list = List.foldl (op ::) [] xs
रिवर्स का यह कार्यान्वयन, जबकि सही और स्पष्ट है, अक्षम है, निष्पादन के लिए [[द्विघात समय]] की आवश्यकता होती है। फ़ंक्शन को [[रैखिक समय]] में निष्पादित करने के लिए फिर से लिखा जा सकता है:
रिवर्स का यह कार्यान्वयन, जबकि सही और स्पष्ट है, अक्षम है, निष्पादन के लिए [[द्विघात समय]] की आवश्यकता होती है। फ़ंक्शन को [[रैखिक समय]] में निष्पादित करने के लिए फिर से लिखा जा सकता है:


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
यह फ़ंक्शन पैरामीट्रिक बहुरूपता का उदाहरण है। यह उन सूचियों का उपभोग कर सकता है जिनके तत्वों का कोई प्रकार है, और उसी प्रकार की सूची वापस कर सकते हैं।
मज़ा 'एक रिवर्स xs:' एक सूची = List.foldl (op ::) [] xs
</वाक्यविन्यास हाइलाइट>
यह फ़ंक्शन पैरामीट्रिक बहुरूपता का एक उदाहरण है। यही है, यह उन सूचियों का उपभोग कर सकता है जिनके तत्वों का कोई प्रकार है, और उसी प्रकार की सूची वापस कर सकते हैं।


=== मॉड्यूल ===
=== मॉड्यूल ===
बड़ी परियोजनाओं और पुस्तकालयों की संरचना के लिए मॉड्यूल एमएल की प्रणाली है। एक मॉड्यूल में एक हस्ताक्षर फ़ाइल और एक या अधिक संरचना फ़ाइलें होती हैं। हस्ताक्षर फ़ाइल [[एपीआई]] को लागू करने के लिए निर्दिष्ट करती है (जैसे सी हेडर फ़ाइल, या [[इंटरफ़ेस (जावा)]] फ़ाइल)संरचना हस्ताक्षर लागू करती है (जैसे सी स्रोत फ़ाइल या जावा क्लास फ़ाइल)। उदाहरण के लिए, निम्नलिखित एक अंकगणितीय हस्ताक्षर को परिभाषित करता है और परिमेय संख्याओं का उपयोग करके इसका कार्यान्वयन करता है:
बड़ी परियोजनाओं और पुस्तकालयों की संरचना के लिए मॉड्यूल एमएल की प्रणाली है। मॉड्यूल में हस्ताक्षर फ़ाइल और अधिक संरचना फ़ाइलें होती हैं। हस्ताक्षर फ़ाइल [[एपीआई]] को प्रारम्भ करने के लिए निर्दिष्ट करती है (जैसे C हेडर फ़ाइल, या [[इंटरफ़ेस (जावा)]] फ़ाइल) और संरचना हस्ताक्षर प्रारम्भ करती है (जैसे सी स्रोत फ़ाइल या जावा क्लास फ़ाइल)। उदाहरण के लिए, निम्नलिखित अंकगणितीय हस्ताक्षर को परिभाषित करता है और परिमेय संख्याओं का उपयोग करके इसका कार्यान्वयन करता है:
      signature ARITH =


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
sig
हस्ताक्षर एरिथ =
        type t
हस्ताक्षर
        val zero : t
        टी टाइप करें
        val succ : t -> t
        वैल शून्य: टी
        val sum : t * t -> t
        वैल सफलता: टी -> टी
end
        वैल योग: टी * टी -> टी
अंत
</वाक्यविन्यास हाइलाइट>


<वाक्यविन्यास प्रकाश लैंग = एसएमएल>
        structure Rational : ARITH =
संरचना परिमेय : ARITH =
struct
        डेटाटाइप टी = इंट का चूहा * इंट
        वैल शून्य = चूहा (0, 1)
        मज़ा सफलता (चूहा (ए, बी)) = चूहा (ए + बी, बी)
        मज़ा योग (चूहा (ए, बी), चूहा (सी, डी)) = चूहा (ए * डी + सी * बी, बी * डी)
अंत
</वाक्यविन्यास हाइलाइट>


इन्हें 'use' कमांड द्वारा दुभाषिया में आयात किया जाता है। कार्यान्वयन के साथ सहभागिता केवल हस्ताक्षर कार्यों के माध्यम से अनुमति दी जाती है, उदाहरण के लिए इस कोड के माध्यम से सीधे 'रैट' डेटा ऑब्जेक्ट बनाना संभव नहीं है। 'संरचना' ब्लॉक कार्यान्वयन के सभी विवरणों को बाहर से छुपाता है।
struct
        datatype t = Rat of int * int
        val zero = Rat (0, 1)
        fun succ (Rat (a, b)) = Rat (a + b, b)
        fun sum (Rat (a, b), Rat (c, d)) = Rat (a * d + c * b , b * d)
end
इन्हें 'युएसई' कमांड द्वारा दुभाषिया में आयात किया जाता है। कार्यान्वयन के साथ सहभागिता केवल हस्ताक्षर कार्यों के माध्यम से अनुमति दी जाती है, उदाहरण के लिए इस कोड के माध्यम से सीधे 'रैट' डेटा ऑब्जेक्ट बनाना संभव नहीं होता है। 'संरचना' ब्लॉक कार्यान्वयन के सभी विवरणों को बाहर से छुपाता है।


एमएल के मानक पुस्तकालयों को इस तरह से मॉड्यूल के रूप में लागू किया जाता है।
एमएल के मानक पुस्तकालयों को इस प्रकार से मॉड्यूल के रूप में प्रारम्भ किया जाता है।


== यह भी देखें ==
== यह भी देखें ==
* मानक एमएल और {{section link|Standard ML|Implementations}}
* मानक एमएल और {{section link|मानक एमएल|कार्यान्वयन}}
* [[आश्रित एमएल]]: एमएल का निर्भर रूप से टाइप किया गया विस्तार
* [[आश्रित एमएल]]: एमएल का निर्भर रूप से टाइप किया गया विस्तार
** एटीएस (प्रोग्रामिंग भाषा): निर्भर एमएल का एक और विकास
** एटीएस (प्रोग्रामिंग भाषा): निर्भर एमएल का एक और विकास
* [[आलसी एमएल]]: 1980 के दशक की शुरुआत से एक प्रयोगात्मक आलसी मूल्यांकन एमएल बोली
* [[आलसी एमएल|मंद एमएल]]: 1980 के दशक की शुरुआत से एक प्रयोगात्मक आलसी मूल्यांकन एमएल बोली
* [[पाल (प्रोग्रामिंग भाषा)]]: एमएल से संबंधित एक शैक्षिक भाषा
* [[पाल (प्रोग्रामिंग भाषा)]]: एमएल से संबंधित एक शैक्षिक भाषा
* OCaml: [[Coq]] को लागू करने के लिए उपयोग की जाने वाली एक ML बोली
* ओसीएमएल: [[Coq|सीओक्यू]] को प्रारम्भ करने के लिए उपयोग की जाने वाली एक एमएल बोली
* एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ #: .NET फ्रेमवर्क के लिए एक ओपन-सोर्स क्रॉस-प्लेटफॉर्म फंक्शनल-फर्स्ट लैंग्वेज
* एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ:नेफ्ट फ्रेमवर्क के लिए ओपन-सोर्स क्रॉस-प्लेटफॉर्म फंक्शनल-फर्स्ट लैंग्वेज
* [[एकमा स्क्रिप्ट]] और [[टाइपप्रति]]: ईसीएमएस्क्रिप्ट के लिए धातु भाषाएं
* [[एकमा स्क्रिप्ट]] और [[टाइपप्रति]]: ईसीएमएस्क्रिप्ट के लिए धातु भाषाएं


Line 136: Line 111:


==अग्रिम पठन==
==अग्रिम पठन==
* ''The Definition of Standard ML'', Robin Milner, [[Mads Tofte]], [[Robert Harper (computer scientist)|Robert Harper]], MIT Press 1990; (revised edition adds author David MacQueen), MIT Press 1997, {{ISBN|0-262-63181-4}} [https://smlfamily.github.io/sml97-defn.pdf The Definition of Standard ML (Revised)].
* ''The Definition of Standard एमएल'', Robin Milner, [[Mads Tofte]], [[Robert Harper (computer scientist)|Robert Harper]], MIT Press 1990; (revised edition adds author David MacQueen), MIT Press 1997, {{ISBN|0-262-63181-4}} [https://smlfamily.github.io/sml97-defn.pdf The Definition of Standard एमएल (Revised)].
* ''Commentary on Standard ML'', [[Robin Milner]], [[Mads Tofte]], MIT Press 1997, {{ISBN|0-262-63137-7}}.
* ''Commentary on Standard एमएल'', [[Robin Milner]], [[Mads Tofte]], MIT Press 1997, {{ISBN|0-262-63137-7}}.
* ''ML for the Working Programmer'', [[Lawrence Paulson]], Cambridge University Press 1991, 1996, {{ISBN|0-521-57050-6}}.
* ''एमएल for the Working Programmer'', [[Lawrence Paulson]], Cambridge University Press 1991, 1996, {{ISBN|0-521-57050-6}}.
* {{cite book |url=https://www.cs.cmu.edu/~rwh/isml/book.pdf |first=Robert |last=Harper |title=Programming in Standard ML|publisher= Carnegie Mellon University |year=2011}}
* {{cite book |url=https://www.cs.cmu.edu/~rwh/isml/book.pdf |first=Robert |last=Harper |title=Programming in Standard ML|publisher= Carnegie Mellon University |year=2011}}
* ''Elements of ML Programming'', [[Jeffrey D. Ullman]], Prentice-Hall 1994, 1998, {{ISBN|0-13-790387-1}}.
* ''Elements of एमएल Programming'', [[Jeffrey D. Ullman]], Prentice-Hall 1994, 1998, {{ISBN|0-13-790387-1}}.




==बाहरी संबंध==
==बाहरी संबंध==
* [http://smlnj.org Standard ML of New Jersey, another popular implementation]
* [http://smlnj.org Standard एमएल of New Jersey, another popular implementation]
* [http://msdn.microsoft.com/en-us/fsharp/default.aspx F#, an ML implementation using the Microsoft .NET framework] {{Webarchive|url=https://web.archive.org/web/20100218004857/http://msdn.microsoft.com/en-us/fsharp/default.aspx |date=2010-02-18 }}
* [http://msdn.microsoft.com/en-us/fsharp/default.aspx F#, an एमएल implementation using the Microsoft .NET framework] {{Webarchive|url=https://web.archive.org/web/20100218004857/http://msdn.microsoft.com/en-us/fsharp/default.aspx |date=2010-02-18 }}
* [http://mlton.org MLton, a whole-program optimizing Standard ML compiler]
* [http://mlton.org एमएलton, a whole-program optimizing Standard एमएल compiler]
* [https://cakeml.org CakeML, a read-eval-print loop version of ML with formally verified runtime and translation to assembler]
* [https://cakeml.org Cakeएमएल, a read-eval-print loop version of एमएल with formally verified runtime and translation to assembler]
 
{{DEFAULTSORT:ML (Programming Language)}}
{{Programming languages}}
{{Authority control}}
 
{{DEFAULTSORT:ML (Programming Language)}}[[Category: अकादमिक प्रोग्रामिंग भाषाएं]] [[Category: कार्यात्मक भाषाएँ]] [[Category: एमएल प्रोग्रामिंग भाषा परिवार]] [[Category: पैटर्न मिलान प्रोग्रामिंग भाषाएं]] [[Category: प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]] [[Category: 1973 में बनाई गई प्रोग्रामिंग लैंग्वेज]] [[Category: वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]]
 
 


[[Category: Machine Translated Page]]
[[Category:1973 में बनाई गई प्रोग्रामिंग लैंग्वेज|ML (Programming Language)]]
[[Category:Created On 17/02/2023]]
[[Category:Articles with hatnote templates targeting a nonexistent page|ML (Programming Language)]]
[[Category:Collapse templates|ML (Programming Language)]]
[[Category:Created On 17/02/2023|ML (Programming Language)]]
[[Category:Lua-based templates|ML (Programming Language)]]
[[Category:Machine Translated Page|ML (Programming Language)]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|ML (Programming Language)]]
[[Category:Pages with script errors|ML (Programming Language)]]
[[Category:Short description with empty Wikidata description|ML (Programming Language)]]
[[Category:Sidebars with styles needing conversion|ML (Programming Language)]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|ML (Programming Language)]]
[[Category:Templates generating microformats|ML (Programming Language)]]
[[Category:Templates that add a tracking category|ML (Programming Language)]]
[[Category:Templates that are not mobile friendly|ML (Programming Language)]]
[[Category:Templates that generate short descriptions|ML (Programming Language)]]
[[Category:Templates using TemplateData|ML (Programming Language)]]
[[Category:Webarchive template wayback links|ML (Programming Language)]]
[[Category:Wikipedia metatemplates|ML (Programming Language)]]
[[Category:अकादमिक प्रोग्रामिंग भाषाएं|ML (Programming Language)]]
[[Category:एमएल प्रोग्रामिंग भाषा परिवार|ML (Programming Language)]]
[[Category:कार्यात्मक भाषाएँ|ML (Programming Language)]]
[[Category:पैटर्न मिलान प्रोग्रामिंग भाषाएं|ML (Programming Language)]]
[[Category:प्रक्रियात्मक प्रोग्रामिंग भाषाएँ|ML (Programming Language)]]
[[Category:वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ|ML (Programming Language)]]

Latest revision as of 15:36, 27 October 2023

एमएल
Paradigmमल्टी-पैराडाइम: फंक्शनल, जेनेरिक, अनिवार्य
द्वारा डिज़ाइन किया गयारॉबिन मिलनर और एडिनबर्ग विश्वविद्यालय में अन्य
टाइपिंग अनुशासनअनुमानित, स्थिर, मजबूत
Dialects
ओकैमल, मानक एमएल, एफ
Influenced by
ईस्वीं
Influenced
Clojure, Coq, Cyclone, C++, Elm, F#, F*, Haskell, Idris, Kotlin, Miranda, Nemerle, OCaml, Opa, Erlang, Rust, Scala, Standard ML

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

अवलोकन

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

एमएल की दृढ़ता अधिकतर भाषा डिजाइन और परिवर्तन (संकलक, विश्लेषक, प्रमेय सिद्ध) में प्रारम्भ होती है, लेकिन यह सामान्य उद्देश्य वाली भाषा है जिसका उपयोग जैव सूचना विज्ञान और वित्तीय प्रणालियों में भी किया जाता है।

एमएल को एडिनबर्ग विश्वविद्यालय में 1970 के दशक के प्रारम्भ में रॉबिन मिलनर और अन्य द्वारा विकसित किया गया था [4] और इसका सिंटैक्स आईएसडब्लूआईएम से प्रेरित है। ऐतिहासिक रूप से, एमएल की कल्पना को संगणनीय कार्यों के लिए तर्क (जिसकी भाषा, प्लम्बडा, पहले क्रम का तर्क का संयोजन फ़र्स्ट-ऑर्डर प्रेडिकेट कैलकुलस और सिंपल-टाइप्ड पॉलीमॉर्फिज़्म (कंप्यूटर साइंस) लैम्ब्डा कैलकुलस) के लिए प्रूफ टैक्टिक्स विकसित करने के लिए की गई थी)।

एमएल परिवार में कई भाषाएं हैं; तीन सबसे प्रमुख मानक एसएमएल, ओसीएमएल और एफ शार्प (प्रोग्रामिंग भाषा) हैं। एमएल के विचारों ने कई अन्य भाषाओं, जैसे हास्केल (प्रोग्रामिंग भाषा), साइक्लोन (प्रोग्रामिंग भाषा), नेमर्ले,[5] एटीएस (प्रोग्रामिंग भाषा), और एल्म (प्रोग्रामिंग भाषा) को प्रभावित किया है।[6]

उदाहरण

निम्नलिखित उदाहरण मानक एमएल के सिंटैक्स का उपयोग करते हैं। अन्य एमएल भाषाएँ जैसे ओसीएमएल और F छोटे-छोटे विधि से भिन्न हैं।

फ़ैक्टोरियल

शुद्ध एमएल के रूप में व्यक्त फैक्टोरियल फ़ंक्शन:

 fun fac (0 : int) : int = 1
  | fac (n : int) : int = n * fac (n - 1)

यह फैक्टोरियल को पुनरावर्ती फ़ंक्शन के रूप में वर्णित करता है, जिसमें एकल समाप्ति आधार केस होता है। यह गणित की पाठ्यपुस्तकों में पाए जाने वाले फैक्टोरियल्स के विवरण के समान होता है। अधिकांश एमएल कोड सुविधा और सिंटैक्स में गणित के समान होते है।

दिखाई गई परिभाषा का भाग वैकल्पिक है, और इस फ़ंक्शन के प्रकारों का वर्णन करता है। संकेतन E: t को व्यंजक E के प्रकार t के रूप में पढ़ा जा सकता है। उदाहरण के लिए, तर्क n को टाइप पूर्णांक (int) असाइन किया गया है, और fac (n: int), पूर्णांक n पर fac लगाने का परिणाम भी प्रकार पूर्णांक है। पूर्ण के रूप में फ़ंक्शन फ़ैक में पूर्णांक से पूर्णांक (int -> int) तक टाइप फ़ंक्शन होता है, अर्थात, पूर्णांक को तर्क के रूप में स्वीकार करता है और पूर्णांक परिणाम देता है। टाइप के अनुमान के लिए धन्यवाद, टाइप के एनोटेशन को छोड़ा जा सकता है और संकलक द्वारा प्राप्त किया जाएगा। टाइप एनोटेशन के बिना पुनर्लेखित, उदाहरण इस प्रकार दिखता है:

 fun fac 0 = 1
  | fac n = n * fac (n - 1)

फ़ंक्शन पैटर्न मिलान पर भी निर्भर करता है, जो एमएल प्रोग्रामिंग का महत्वपूर्ण भाग है। ध्यान दें कि किसी फ़ंक्शन के पैरामीटर आवश्यक रूप से कोष्ठक में नहीं हैं बल्कि रिक्त स्थान द्वारा अलग किए गए हैं। जब फ़ंक्शन का तर्क 0 (शून्य) होता है तो यह पूर्णांक 1 (एक) लौटाएगा। अन्य सभी विषयो के लिए दूसरी पंक्ति की कोशिश की जाती है। यह रिकर्सन (कंप्यूटर विज्ञान) है, और बेस केस तक पहुंचने तक फ़ंक्शन को फिर से निष्पादित करता है।

फैक्टोरियल फ़ंक्शन के इस कार्यान्वयन को समाप्त करने की गारंटी नहीं है, क्योंकि नकारात्मक तर्क पुनरावर्ती कॉल की अनंत अवरोही श्रृंखला का कारण बनता है। अधिक स्थिर कार्यान्वयन पुनरावर्ती से पहले गैर-नकारात्मक तर्क का अन्वेषण करेगा, जो इस प्रकार है:

 fun fact n = let
  fun fac 0 = 1
    | fac n = n * fac (n - 1)
  in
    if (n < 0) then raise Domain else fac n
  end

समस्याग्रस्त विषय (जब n ऋणात्मक होता है) एमएल की अपवाद प्रणाली के उपयोग को प्रदर्शित करता है।

इसके आंतरिक लूप को टेल कॉल के रूप में लिखकर फ़ंक्शन को और अच्छा बनाया जा सकता है, जैसे कि कॉल स्टैक को फ़ंक्शन कॉल की संख्या के अनुपात में बढ़ने की आवश्यकता नहीं है। यह आंतरिक फ़ंक्शन में अतिरिक्त, संचायक, पैरामीटर जोड़कर प्राप्त किया जाता है। अंत में, हम पहुंचे

 fun fact n = let
  fun fac 0 acc = acc
    | fac n acc = fac (n - 1) (n * acc)
  in
    if (n < 0) then raise Domain else fac n 1
  end

उत्क्रम सूची

निम्न फ़ंक्शन किसी सूची में तत्वों को परिवर्तित कर देता है। अधिक त्रुटिहीन रूप से, यह नई सूची देता है जिसके तत्व दी गई सूची की तुलना में विपरीत क्रम में होते हैं।

 fun 'a reverse xs : 'a list = List.foldl (op ::) [] xs

रिवर्स का यह कार्यान्वयन, जबकि सही और स्पष्ट है, अक्षम है, निष्पादन के लिए द्विघात समय की आवश्यकता होती है। फ़ंक्शन को रैखिक समय में निष्पादित करने के लिए फिर से लिखा जा सकता है:

यह फ़ंक्शन पैरामीट्रिक बहुरूपता का उदाहरण है। यह उन सूचियों का उपभोग कर सकता है जिनके तत्वों का कोई प्रकार है, और उसी प्रकार की सूची वापस कर सकते हैं।

मॉड्यूल

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

      signature ARITH =
sig
        type t
        val zero : t
        val succ : t -> t
        val sum : t * t -> t
end
       structure Rational : ARITH =
struct
        datatype t = Rat of int * int
        val zero = Rat (0, 1)
        fun succ (Rat (a, b)) = Rat (a + b, b)
        fun sum (Rat (a, b), Rat (c, d)) = Rat (a * d + c * b , b * d)
end

इन्हें 'युएसई' कमांड द्वारा दुभाषिया में आयात किया जाता है। कार्यान्वयन के साथ सहभागिता केवल हस्ताक्षर कार्यों के माध्यम से अनुमति दी जाती है, उदाहरण के लिए इस कोड के माध्यम से सीधे 'रैट' डेटा ऑब्जेक्ट बनाना संभव नहीं होता है। 'संरचना' ब्लॉक कार्यान्वयन के सभी विवरणों को बाहर से छुपाता है।

एमएल के मानक पुस्तकालयों को इस प्रकार से मॉड्यूल के रूप में प्रारम्भ किया जाता है।

यह भी देखें

  • मानक एमएल और मानक एमएल § कार्यान्वयन
  • आश्रित एमएल: एमएल का निर्भर रूप से टाइप किया गया विस्तार
    • एटीएस (प्रोग्रामिंग भाषा): निर्भर एमएल का एक और विकास
  • मंद एमएल: 1980 के दशक की शुरुआत से एक प्रयोगात्मक आलसी मूल्यांकन एमएल बोली
  • पाल (प्रोग्रामिंग भाषा): एमएल से संबंधित एक शैक्षिक भाषा
  • ओसीएमएल: सीओक्यू को प्रारम्भ करने के लिए उपयोग की जाने वाली एक एमएल बोली
  • एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ:नेफ्ट फ्रेमवर्क के लिए ओपन-सोर्स क्रॉस-प्लेटफॉर्म फंक्शनल-फर्स्ट लैंग्वेज
  • एकमा स्क्रिप्ट और टाइपप्रति: ईसीएमएस्क्रिप्ट के लिए धातु भाषाएं

संदर्भ

  1. Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.
  2. Milner, Robin; Tofte, Mads (1991). "4.1 Contexts, environments and scope". Commentary on Standard ML. The MIT Press. pp. 35–36. ISBN 0-262-63137-7.
  3. Sebesta, Robert (1999). Concepts of Programming Languages (4th ed.). Addison-Westley. p. 54. ISBN 0-201-38596-1.
  4. Gordon, Michael J. C. (1996). "From LCF to HOL: a short history". Retrieved 2007-10-11.
  5. Programming language for "special forces" of developers, Russian Software Development Network: Nemerle Project Team, retrieved January 24, 2021
  6. Tate, Bruce A.; Daoud, Fred; Dees, Ian; Moffitt, Jack (2014). "3. Elm". Seven More Languages in Seven Weeks (Book version: P1.0-November 2014 ed.). The Pragmatic Programmers, LLC. pp. 97, 101. ISBN 978-1-941222-15-7. On page 101, Elm creator Evan Czaplicki says: 'I tend to say "Elm is an ML-family language" to get at the shared heritage of all these languages.' ["these languages" is referring to Haskell, OCaml, SML, and F#.]


अग्रिम पठन


बाहरी संबंध