कर्र्यींग (Currying): Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Transforming a function in such a way that it only takes a single argument}} | {{short description|Transforming a function in such a way that it only takes a single argument}} | ||
{{about|गणितीय तकनीक|इस नाम की खाना पकाने की प्रक्रिया|करी|चमड़ा परिष्करण प्रक्रिया|कर्रिएर|घोड़े की देखभाल|करीकंघी}} | {{about|गणितीय तकनीक|इस नाम की खाना पकाने की प्रक्रिया|करी|चमड़ा परिष्करण प्रक्रिया|कर्रिएर|घोड़े की देखभाल|करीकंघी}} | ||
गणित और [[कंप्यूटर विज्ञान]] में, करींग एक के मूल्यांकन का अनुवाद करने की विधि है जो | गणित और [[कंप्यूटर विज्ञान]] में, करींग एक के मूल्यांकन का अनुवाद करने की विधि है जो फलनों के [[पैरामीटर (कंप्यूटर विज्ञान)|अनुक्रम (कंप्यूटर विज्ञान)]] का मूल्यांकन करने में कई तर्क लेता है, प्रत्येक एक तर्क के साथ। उदाहरण के लिए, एक कलन <math>f</math> जो तीन तर्क लेता है, एक स्थिर एकल फलन <math>g</math> बनाता है, ताकि संकेत | ||
:<math>\text{let }x=f(a,b,c)</math> | :<math>\text{let }x=f(a,b,c)</math> | ||
संकेत के समान मान <math>x</math> देता है | संकेत के समान मान <math>x</math> देता है | ||
Line 14: | Line 14: | ||
या क्रम में कहा जाता है, | या क्रम में कहा जाता है, | ||
:<math>\text{let }x = g(a)(b)(c).</math> | :<math>\text{let }x = g(a)(b)(c).</math> | ||
गणितीय भाषा में अधिकतर, एक फलन जो दो तर्क लेता है, एक से <math>X</math> और दूसरे से <math>Y</math>, और <math>Z,</math> में आउटपुट उत्पन्न करता है करीइंग द्वारा एक फलन में अनुवादित किया जाता है जो <math>X</math> से एकल तर्क लेता है और <math>Y</math> से <math>Z</math> तक आउटपुट फ़ंक्शन के रूप में उत्पन्न करता है। यह इन दो प्रकार के | गणितीय भाषा में अधिकतर, एक फलन जो दो तर्क लेता है, एक से <math>X</math> और दूसरे से <math>Y</math>, और <math>Z,</math> में आउटपुट उत्पन्न करता है करीइंग द्वारा एक फलन में अनुवादित किया जाता है जो <math>X</math> से एकल तर्क लेता है और <math>Y</math> से <math>Z</math> तक आउटपुट फ़ंक्शन के रूप में उत्पन्न करता है। यह इन दो प्रकार के फलनों के बीच एक स्वाभाविक एक-से-एक पत्राचार है, जिससे कि [[सेट (गणित)]] उनके बीच के फलनों के साथ एक [[कार्टेशियन बंद श्रेणी|कार्तीय बंद श्रेणी]] बनाते हैं। दो से अधिक तर्कों वाले फलन की करी को तब प्रेरण द्वारा परिभाषित किया जा सकता है। करी संबंधित है, लेकिन आंशिक अनुप्रयोग के समान नहीं है। | ||
करी करना व्यावहारिक और सैद्धांतिक दोनों स्थितियों में उपयोगी है। [[कार्यात्मक प्रोग्रामिंग भाषा|कार्यात्मक प्रोग्रामिंग भाषाओं]] और कई अन्य भाषाओं में, यह स्वचालित रूप से प्रबंधित करने का एक विधि प्रदान करता है कि फलन और अपवादों के लिए तर्क कैसे पास किए जाते हैं। [[सैद्धांतिक कंप्यूटर विज्ञान]] में, यह सरल सैद्धांतिक मॉडल में कई तर्कों के साथ | करी करना व्यावहारिक और सैद्धांतिक दोनों स्थितियों में उपयोगी है। [[कार्यात्मक प्रोग्रामिंग भाषा|कार्यात्मक प्रोग्रामिंग भाषाओं]] और कई अन्य भाषाओं में, यह स्वचालित रूप से प्रबंधित करने का एक विधि प्रदान करता है कि फलन और अपवादों के लिए तर्क कैसे पास किए जाते हैं। [[सैद्धांतिक कंप्यूटर विज्ञान]] में, यह सरल सैद्धांतिक मॉडल में कई तर्कों के साथ फलनों का अध्ययन करने का एक विधि प्रदान करता है जो केवल एक तर्क प्रदान करता है। करी और अनकरींग की सख्त धारणा के लिए सबसे सामान्य सेटिंग [[बंद मोनोइडल श्रेणी]] में है, जो क्वांटम यांत्रिकी, कोबोर्डिज्म और स्ट्रिंग सिद्धांत सहित कई अन्य संरचनाओं के साथ पत्राचार के लिए करी-हावर्ड पत्राचार के सबूत और कार्यक्रमों के विशाल सामान्यीकरण को रेखांकित करता है। .<ref name="rosetta"/> यह [[Gottlob Frege|गोटलॉब फ्रेज]] द्वारा प्रस्तुत किया गया था,<ref name=Frege>[[Gottlob Frege]], ''Grundgesetze der Arithmetik'' I, Jena: Verlag Hermann Pohle, 1893, §36.</ref><ref name=:0>[[Willard Van Orman Quine]], introduction to [[Moses Schönfinkel]]'s "Bausteine der mathematischen Logik", pp. 355–357, esp. 355. Translated by Stefan Bauer-Mengelberg as "On the building blocks of mathematical logic" in [[Jean van Heijenoort]] (1967), ''A Source Book in Mathematical Logic, 1879–1931''. Harvard University Press, pp. 355–66.</ref> मूसा शॉनफिंकेल द्वारा विकसित,<ref name=:0/><ref name=Strachey>{{cite journal|first=Christopher|last=Strachey|author-link=Christopher Strachey|title=प्रोग्रामिंग भाषाओं में मौलिक अवधारणाएँ|journal=[[Higher-Order and Symbolic Computation]]|volume=13|page=21|year=2000|quote=एकल ऑपरेंड ऑपरेटरों के क्रमिक अनुप्रयोग के लिए कई ऑपरेंड वाले ऑपरेटरों को कम करने के लिए शॉनफिंकेल द्वारा उत्पन्न एक उपकरण है।|doi=10.1023/A:1010000313106|s2cid=14124601 |citeseerx=10.1.1.332.3161}} (Reprinted lecture notes from 1967.)</ref><ref name=Reynolds>{{cite journal|first=John C.|last=Reynolds|author-link=John C. Reynolds|title=हायर-ऑर्डर प्रोग्रामिंग लैंग्वेज के लिए डेफिनिशनल इंटरप्रेटर|journal=Proceedings of the ACM Annual Conference|volume=2|issue=4|pages=717–740|doi=10.1145/800194.805852|quote=अंतिम पंक्ति में हमने बाइनरी ऑपरेशन को एक भाषा में शुरू करने की समस्या को हल करने के लिए करीइंग (तर्कशास्त्री एच. करी के बाद) नामक एक ट्रिक का उपयोग किया है जहां सभी कार्यों को एक ही तर्क को स्वीकार करना होगा। (रेफरी की टिप्पणी है कि हालांकि "करीइंग" स्वादिष्ट है, "शॉनफिंकेलिंग" अधिक सटीक हो सकता है।)|year=1972|s2cid=163294|url=https://surface.syr.edu/cgi/viewcontent.cgi?article=1012&context=lcsmith_other}}</ref><ref>Kenneth Slonneger and Barry L. Kurtz. ''Formal Syntax and Semantics of Programming Languages''. 1995. p. 144.</ref> | ||
और आगे [[हास्केल करी]] द्वारा विकसित किया गया।<ref>Henk Barendregt, Erik Barendsen, "[http://www.nyu.edu/projects/barker/Lambda/barendregt.94.pdf Introduction to Lambda Calculus]", March 2000, page 8.</ref><ref>{{cite book|last=Curry|first=Haskell|author2=Feys, Robert|title=संयोजन तर्क|publisher=North-Holland Publishing Company |volume=I|edition=2|year=1958|location=Amsterdam, Netherlands}}</ref> | और आगे [[हास्केल करी]] द्वारा विकसित किया गया।<ref>Henk Barendregt, Erik Barendsen, "[http://www.nyu.edu/projects/barker/Lambda/barendregt.94.pdf Introduction to Lambda Calculus]", March 2000, page 8.</ref><ref>{{cite book|last=Curry|first=Haskell|author2=Feys, Robert|title=संयोजन तर्क|publisher=North-Holland Publishing Company |volume=I|edition=2|year=1958|location=Amsterdam, Netherlands}}</ref> | ||
Line 23: | Line 23: | ||
== प्रेरणा == | == प्रेरणा == | ||
करींग उन | करींग उन फलनों के साथ काम करने का एक विधि प्रदान करता है जो कई तर्क लेते हैं, और उन्हें संरचनाओं में उपयोग करते हैं जहां फलन केवल एक तर्क ले सकते हैं। उदाहरण के लिए, कुछ विश्लेषणात्मक विधियों को केवल एक ही तर्क वाले फलनों पर लागू किया जा सकता है। व्यावहारिक कार्य अधिकांश इससे अधिक तर्क लेते हैं। फ्रीज ने दिखाया कि यह एकल तर्क स्थितियों के लिए समाधान प्रदान करने के लिए पर्याप्त था, क्योंकि एक फलन को कई तर्कों के साथ एकल-तर्क फलनों की श्रृंखला में बदलना संभव था। यह परिवर्तन अब करी के रूप में जानी जाने वाली प्रक्रिया है।<ref>{{cite web|url=http://www.cs.nott.ac.uk/~gmh/faq.html#currying|title=Comp.lang.functional के लिए अक्सर पूछे जाने वाले प्रश्न: Currying|author=Graham Hutton|work=nott.ac.uk}}</ref> [[गणितीय विश्लेषण]] या [[कंप्यूटर प्रोग्रामिंग]] में सामान्यतः सामने आने वाले सभी सामान्य फलनों को नियंत्रित किया जा सकता है। चूंकि, ऐसी श्रेणियां हैं जिनमें करी बनाना संभव नहीं है; करीने की अनुमति देने वाली सबसे सामान्य श्रेणियां बंद मोनोइडल श्रेणी हैं। | ||
कुछ प्रोग्रामिंग भाषा लगभग हमेशा कई तर्कों को प्राप्त करने के लिए करीबी फलनों का उपयोग करती हैं; उल्लेखनीय उदाहरण [[एमएल ([[प्रोग्रामिंग भाषा]])]] और [[हास्केल (प्रोग्रामिंग भाषा)]] हैं, जहां दोनों स्थितियों में सभी फलनों में बिल्कुल एक तर्क होता है। यह गुण लैम्ब्डा कलन से विरासत में मिली है, जहां बहु-तर्क फलनों को सामान्यतः घुमावदार रूप में दर्शाया जाता है। | कुछ प्रोग्रामिंग भाषा लगभग हमेशा कई तर्कों को प्राप्त करने के लिए करीबी फलनों का उपयोग करती हैं; उल्लेखनीय उदाहरण [[एमएल ([[प्रोग्रामिंग भाषा]])]] और [[हास्केल (प्रोग्रामिंग भाषा)]] हैं, जहां दोनों स्थितियों में सभी फलनों में बिल्कुल एक तर्क होता है। यह गुण लैम्ब्डा कलन से विरासत में मिली है, जहां बहु-तर्क फलनों को सामान्यतः घुमावदार रूप में दर्शाया जाता है। | ||
Line 30: | Line 30: | ||
=== चित्रण === | === चित्रण === | ||
मान लीजिए हमारे पास <math>f:\mathbb{R}\times\mathbb{R}\to\mathbb{R}</math> एक कलन है जो दो [[वास्तविक संख्या]] (<math>\mathbb{R}</math>) लेता है और वास्तविक संख्या को आउटपुट करता है, और इसके <math>f(x,y)=x+y^2</math> द्वारा परिभाषित किया जाता है. करींग इसे एक कलन <math>h</math> में अनुवादित करता है जो एक वास्तविक तर्क लेता है और <math>\mathbb{R}</math> से <math>\mathbb{R}</math> | मान लीजिए हमारे पास <math>f:\mathbb{R}\times\mathbb{R}\to\mathbb{R}</math> एक कलन है जो दो [[वास्तविक संख्या]] (<math>\mathbb{R}</math>) लेता है और वास्तविक संख्या को आउटपुट करता है, और इसके <math>f(x,y)=x+y^2</math> द्वारा परिभाषित किया जाता है. करींग इसे एक कलन <math>h</math> में अनुवादित करता है जो एक वास्तविक तर्क लेता है और <math>\mathbb{R}</math> से <math>\mathbb{R}</math> फलनों को आउटपुट करता है. प्रतीकों में, <math>h:\mathbb{R}\to\mathbb{R}^\mathbb{R}</math>, जहाँ <math>\mathbb{R}^\mathbb{R}</math>उन सभी फलनों के सेट को दर्शाता है जो एक वास्तविक तर्क लेते हैं और वास्तविक आउटपुट उत्पन्न करते हैं। प्रत्येक वास्तविक संख्या के लिए <math>x</math>, फलन <math>h_x : \mathbb{R}\to\mathbb{R}</math> को परिभाषित करें द्वारा <math>h_x(y)=x+y^2</math>, और उसके बाद फलन <math>h:\mathbb{R}\to\mathbb{R}^\mathbb{R}</math> द्वारा <math>h(x)=h_x</math> को परिभाषित करें. तो उदाहरण के लिए, <math>h(2)</math> वह फलन है जो अपना वास्तविक तर्क <math>y</math> आउटपुट के लिए <math>2+y^2</math>, या <math>h(2)(y)=h_2(y)=2+y^2</math> भेजता है. हम इसे सामान्य तौर पर देखते हैं | ||
:<math>h(x)(y)=x+y^2=f(x,y)</math> | :<math>h(x)(y)=x+y^2=f(x,y)</math> | ||
Line 67: | Line 67: | ||
=== सेट सिद्धांत === | === सेट सिद्धांत === | ||
सेट सिद्धांत में, | सेट सिद्धांत में, संकेतन <math>Y^X</math> सेट से फलनों के सेट (गणित) <math>X</math> सेट पर <math>Y</math> को निरूपित करने के लिए उपयोग किया जाता है. करी <math>A^{B\times C}</math>सेट से फलनों की <math>B\times C</math> से <math>A</math> के बीच [[प्राकृतिक समानता]] है, और सेट <math>(A^C)^B</math> से फलनों की <math>B</math> फलनों के सेट से <math>C</math> से <math>A</math>. प्रतीकों में: | ||
:<math>A^{B\times C}\cong (A^C)^B</math> | :<math>A^{B\times C}\cong (A^C)^B</math> | ||
वास्तविक में, यह प्राकृतिक आपत्ति है जो फलनों के सेट के लिए [[घातीय संकेतन]] को सही ठहराती है। जैसा कि करीने के सभी उदाहरणों में होता है, ऊपर दिया गया सूत्र एक [[सहायक कारक]] का वर्णन करता है: प्रत्येक निश्चित सेट के लिए <math>C</math>, काम करनेवाला <math>B\mapsto B\times C</math> प्रकार्यक के पास <math>A \mapsto A^C</math>छोड़ दिया जाता है. | |||
[[सेट की श्रेणी]] में, [[गणितीय वस्तु]] <math>Y^X</math> [[घातीय वस्तु]] कहा जाता है। | [[सेट की श्रेणी]] में, [[गणितीय वस्तु]] <math>Y^X</math> [[घातीय वस्तु]] कहा जाता है। | ||
=== कलन रिक्त | === कलन रिक्त स्थानASHIF === | ||
फलन रिक्त स्थान के सिद्धांत में, जैसे कि [[कार्यात्मक विश्लेषण]] या [[होमोटॉपी सिद्धांत]] में, आमतौर पर [[टोपोलॉजिकल स्पेस]] स्थान के बीच [[निरंतर कार्य]] | फलन रिक्त स्थान के सिद्धांत में, जैसे कि [[कार्यात्मक विश्लेषण]] या [[होमोटॉपी सिद्धांत]] में, आमतौर पर [[टोपोलॉजिकल स्पेस]] स्थान के बीच [[निरंतर कार्य|निरंतर]] फलनों में रुचि होती है। एक लिखता है <math>\text{Hom}(X,Y)</math> ([[मैं एक आदमी के रूप में काम करता हूं]]) से सभी फलनों के सेट के लिए <math>X</math> से <math>Y</math>, और संकेतन का उपयोग करता है <math>Y^X</math> निरंतर फलनों के सबसेट को निरूपित करने के लिए। यहां, <math>\text{curry}</math> आक्षेप है | ||
:<math>\text{curry}:\text{Hom}(X\times Y, Z) \to \text{Hom}(X, \text{Hom}(Y,Z)) ,</math> | :<math>\text{curry}:\text{Hom}(X\times Y, Z) \to \text{Hom}(X, \text{Hom}(Y,Z)) ,</math> | ||
जबकि uncurrying उलटा नक्शा है। यदि सेट <math>Y^X</math> से निरंतर | जबकि uncurrying उलटा नक्शा है। यदि सेट <math>Y^X</math> से निरंतर फलनों की <math>X</math> से <math>Y</math> [[कॉम्पैक्ट-ओपन टोपोलॉजी]] दी जाती है, और यदि स्पेस <math>Y</math> तब [[स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ]] है | ||
:<math>\text{curry} : Z^{X\times Y}\to (Z^Y)^X</math> | :<math>\text{curry} : Z^{X\times Y}\to (Z^Y)^X</math> | ||
Line 86: | Line 86: | ||
<math>\begin{align} &&\text{eval}:Y^X \times X \to Y \\ | <math>\begin{align} &&\text{eval}:Y^X \times X \to Y \\ | ||
&& (f,x) \mapsto f(x) \end{align}</math> | && (f,x) \mapsto f(x) \end{align}</math> | ||
निरंतर है जब <math>Y^X</math> कॉम्पैक्ट-ओपन है और <math>Y</math> स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ।<ref name=rotman>Joseph J. Rotman, ''An Introduction to Algebraic Topology'' (1988) Springer-Verlag {{ISBN|0-387-96678-1}} ''(See Chapter 11 for proof.)''</ref> [[होमोटॉपी]] की निरंतरता को स्थापित करने के लिए ये दो परिणाम केंद्रीय हैं, अर्थात कब <math>X</math> इकाई अंतराल है <math>I</math>, ताकि <math>Z^{I\times Y} \cong (Z^Y)^I</math> या तो दो | निरंतर है जब <math>Y^X</math> कॉम्पैक्ट-ओपन है और <math>Y</math> स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ।<ref name=rotman>Joseph J. Rotman, ''An Introduction to Algebraic Topology'' (1988) Springer-Verlag {{ISBN|0-387-96678-1}} ''(See Chapter 11 for proof.)''</ref> [[होमोटॉपी]] की निरंतरता को स्थापित करने के लिए ये दो परिणाम केंद्रीय हैं, अर्थात कब <math>X</math> इकाई अंतराल है <math>I</math>, ताकि <math>Z^{I\times Y} \cong (Z^Y)^I</math> या तो दो फलनों के होमोटॉपी के रूप में सोचा जा सकता है <math>Y</math> से <math>Z</math>, या, समतुल्य, एक एकल (निरंतर) पथ <math>Z^Y</math>. | ||
=== [[बीजगणितीय टोपोलॉजी]] === | === [[बीजगणितीय टोपोलॉजी]] === | ||
Line 98: | Line 98: | ||
=== डोमेन सिद्धांत === | === डोमेन सिद्धांत === | ||
[[आदेश सिद्धांत]] में, अर्थात्, [[आंशिक रूप से आदेशित सेट]]ों के जाली (क्रम) का सिद्धांत, <math>\text{curry}</math> जाली को [[स्कॉट टोपोलॉजी]] दिए जाने पर एक सतत कार्य होता है।<ref>{{cite book |last1=Barendregt |first1=H.P. |author-link1=Henk Barendregt |title=लैम्ब्डा कैलकुलस|year=1984 |publisher=North-Holland |isbn=978-0-444-87508-2}} ''(See theorems 1.2.13, 1.2.14)''</ref> लैम्ब्डा कैलकुस के लिए शब्दार्थ प्रदान करने के प्रयास में स्कॉट-निरंतर | [[आदेश सिद्धांत]] में, अर्थात्, [[आंशिक रूप से आदेशित सेट]]ों के जाली (क्रम) का सिद्धांत, <math>\text{curry}</math> जाली को [[स्कॉट टोपोलॉजी]] दिए जाने पर एक सतत कार्य होता है।<ref>{{cite book |last1=Barendregt |first1=H.P. |author-link1=Henk Barendregt |title=लैम्ब्डा कैलकुलस|year=1984 |publisher=North-Holland |isbn=978-0-444-87508-2}} ''(See theorems 1.2.13, 1.2.14)''</ref> लैम्ब्डा कैलकुस के लिए शब्दार्थ प्रदान करने के प्रयास में स्कॉट-निरंतर फलनों की पहली बार जांच की गई थी (जैसा कि सामान्य सेट सिद्धांत ऐसा करने के लिए अपर्याप्त है)। अधिक सामान्यतः, स्कॉट-निरंतर फलनों का अध्ययन अब [[डोमेन सिद्धांत]] में किया जाता है, जिसमें कंप्यूटर एल्गोरिदम के [[सांकेतिक शब्दार्थ]] का अध्ययन शामिल है। ध्यान दें कि स्कॉट टोपोलॉजी [[टोपोलॉजिकल स्पेस की श्रेणी]] में आने वाली कई सामान्य टोपोलॉजी से काफी अलग है; स्कॉट टोपोलॉजी आमतौर पर [[अंतिम टोपोलॉजी]] है, और [[शांत स्थान]] नहीं है। | ||
निरंतरता की धारणा होमोटोपी प्रकार के सिद्धांत में प्रकट होती है, जहां, मोटे तौर पर बोलना, दो कंप्यूटर प्रोग्रामों को होमोटोपिक माना जा सकता है, अर्थात समान परिणामों की गणना करें, यदि वे एक से दूसरे में लगातार [[कोड रीफैक्टरिंग|संकेत रीफैक्टरिंग]] कर सकते हैं। | निरंतरता की धारणा होमोटोपी प्रकार के सिद्धांत में प्रकट होती है, जहां, मोटे तौर पर बोलना, दो कंप्यूटर प्रोग्रामों को होमोटोपिक माना जा सकता है, अर्थात समान परिणामों की गणना करें, यदि वे एक से दूसरे में लगातार [[कोड रीफैक्टरिंग|संकेत रीफैक्टरिंग]] कर सकते हैं। | ||
=== लैम्ब्डा गणना === | === लैम्ब्डा गणना === | ||
सैद्धांतिक कंप्यूटर विज्ञान में, करींग लैम्ब्डा कैलकुस जैसे बहुत ही सरल सैद्धांतिक मॉडल में कई तर्कों के साथ | सैद्धांतिक कंप्यूटर विज्ञान में, करींग लैम्ब्डा कैलकुस जैसे बहुत ही सरल सैद्धांतिक मॉडल में कई तर्कों के साथ फलनों का अध्ययन करने का एक विधि प्रदान करता है, जिसमें कार्य केवल एक तर्क लेते हैं। एक कलन पर विचार करें <math>f(x,y)</math> दो तर्क लेना, और प्रकार रखना <math>(X \times Y)\to Z</math>, जिसका अर्थ यह समझा जाना चाहिए कि x का प्रकार होना चाहिए <math>X</math>, y का प्रकार होना चाहिए <math>Y</math>, और फलन स्वयं प्रकार लौटाता है <math>Z</math>. F के कढ़ी रूप को परिभाषित किया गया है | ||
:<math>\text{curry}(f) = \lambda x.(\lambda y.(f(x,y)))</math> | :<math>\text{curry}(f) = \lambda x.(\lambda y.(f(x,y)))</math> | ||
Line 115: | Line 115: | ||
यही है, आवेदन के क्रम को स्पष्ट करने के लिए कोष्ठक की आवश्यकता नहीं है। | यही है, आवेदन के क्रम को स्पष्ट करने के लिए कोष्ठक की आवश्यकता नहीं है। | ||
करीबी | करीबी फलनों का उपयोग किसी भी प्रोग्रामिंग भाषा में किया जा सकता है जो क्लोजर (कंप्यूटर विज्ञान) का समर्थन करता है; हालांकि, अनिश्चित फलनों को सामान्यतः दक्षता कारणों से पसंद किया जाता है, क्योंकि आंशिक अनुप्रयोग के ऊपरी हिस्से और बंद करने के निर्माण को अधिकांश फलन कॉलों के लिए टाला जा सकता है। | ||
=== [[प्रकार सिद्धांत]] === | === [[प्रकार सिद्धांत]] === | ||
Line 147: | Line 147: | ||
== आंशिक फलन एप्लिकेशन == के साथ तुलना करें | == आंशिक फलन एप्लिकेशन == के साथ तुलना करें | ||
{{main article|Partial application}} | {{main article|Partial application}} | ||
करी और आंशिक कार्य अनुप्रयोग अक्सर मिश्रित होते हैं।<ref>{{cite web|url=http://www.uncarved.com/articles/not_currying|archive-url=https://web.archive.org/web/20161023205431/http://www.uncarved.com/articles/not_currying|url-status=dead|archive-date=2016-10-23|title=द अनकार्व्ड ब्लॉग: आंशिक कार्य अनुप्रयोग करी नहीं है|work=uncarved.com}}</ref> दोनों के बीच महत्वपूर्ण अंतरों में से एक यह है कि आंशिक रूप से लागू किए गए फलन के लिए कॉल तुरंत परिणाम देता है, करींग श्रृंखला के नीचे कोई अन्य फलन नहीं; इस भेद को उन | करी और आंशिक कार्य अनुप्रयोग अक्सर मिश्रित होते हैं।<ref>{{cite web|url=http://www.uncarved.com/articles/not_currying|archive-url=https://web.archive.org/web/20161023205431/http://www.uncarved.com/articles/not_currying|url-status=dead|archive-date=2016-10-23|title=द अनकार्व्ड ब्लॉग: आंशिक कार्य अनुप्रयोग करी नहीं है|work=uncarved.com}}</ref> दोनों के बीच महत्वपूर्ण अंतरों में से एक यह है कि आंशिक रूप से लागू किए गए फलन के लिए कॉल तुरंत परिणाम देता है, करींग श्रृंखला के नीचे कोई अन्य फलन नहीं; इस भेद को उन फलनों के लिए स्पष्ट रूप से चित्रित किया जा सकता है जिनकी संख्या दो से अधिक है।<ref>{{cite web|url=http://slid.es/gsklee/functional-programming-in-5-minutes|title=5 मिनट में कार्यात्मक प्रोग्रामिंग|work=Slides}}</ref> | ||
प्रकार का एक कार्य दिया <math>f \colon (X \times Y \times Z) \to N </math>, करी पैदा करता है <math>\text{curry}(f) \colon X \to (Y \to (Z \to N)) </math>. यही है, जबकि पहले फलन का मूल्यांकन इस रूप में प्रदर्शित किया जा सकता है <math>f(1, 2, 3)</math>, करीबी कलन के मूल्यांकन के रूप में प्रतिनिधित्व किया जाएगा <math>f_\text{curried}(1)(2)(3)</math>, प्रत्येक तर्क को पिछले मंगलाचरण द्वारा लौटाए गए एकल-तर्क फलन के बदले में लागू करना। ध्यान दें कि कॉल करने के बाद <math>f_\text{curried}(1)</math>, हम एक ऐसे फलन के साथ बचे हैं जो एक तर्क लेता है और दूसरा फलन देता है, न कि एक ऐसा फलन जो दो तर्क लेता है। | प्रकार का एक कार्य दिया <math>f \colon (X \times Y \times Z) \to N </math>, करी पैदा करता है <math>\text{curry}(f) \colon X \to (Y \to (Z \to N)) </math>. यही है, जबकि पहले फलन का मूल्यांकन इस रूप में प्रदर्शित किया जा सकता है <math>f(1, 2, 3)</math>, करीबी कलन के मूल्यांकन के रूप में प्रतिनिधित्व किया जाएगा <math>f_\text{curried}(1)(2)(3)</math>, प्रत्येक तर्क को पिछले मंगलाचरण द्वारा लौटाए गए एकल-तर्क फलन के बदले में लागू करना। ध्यान दें कि कॉल करने के बाद <math>f_\text{curried}(1)</math>, हम एक ऐसे फलन के साथ बचे हैं जो एक तर्क लेता है और दूसरा फलन देता है, न कि एक ऐसा फलन जो दो तर्क लेता है। | ||
Line 154: | Line 154: | ||
सहज रूप से, आंशिक फलन एप्लिकेशन कहता है कि यदि आप फलन के पहले पैरामीटर (कंप्यूटर विज्ञान) को ठीक करते हैं, तो आपको शेष तर्कों का एक फलन मिलता है। उदाहरण के लिए, यदि फलन div डिवीजन ऑपरेशन x/y के लिए खड़ा है, तो पैरामीटर x के साथ div 1 पर तय किया गया है (यानी, div 1) एक और फलन है: फलन inv के समान जो इसके तर्क के गुणात्मक व्युत्क्रम को परिभाषित करता है, परिभाषित आमंत्रण द्वारा (y) = 1/y. | सहज रूप से, आंशिक फलन एप्लिकेशन कहता है कि यदि आप फलन के पहले पैरामीटर (कंप्यूटर विज्ञान) को ठीक करते हैं, तो आपको शेष तर्कों का एक फलन मिलता है। उदाहरण के लिए, यदि फलन div डिवीजन ऑपरेशन x/y के लिए खड़ा है, तो पैरामीटर x के साथ div 1 पर तय किया गया है (यानी, div 1) एक और फलन है: फलन inv के समान जो इसके तर्क के गुणात्मक व्युत्क्रम को परिभाषित करता है, परिभाषित आमंत्रण द्वारा (y) = 1/y. | ||
आंशिक अनुप्रयोग के लिए व्यावहारिक अभिप्रेरणा यह है कि बहुत बार किसी फलन के लिए सभी नहीं बल्कि कुछ तर्क देकर प्राप्त किए गए फलन उपयोगी होते हैं; उदाहरण के लिए, कई भाषाओं में समान कार्य या संचालिका होती है <code>plus_one</code>. आंशिक अनुप्रयोग इन | आंशिक अनुप्रयोग के लिए व्यावहारिक अभिप्रेरणा यह है कि बहुत बार किसी फलन के लिए सभी नहीं बल्कि कुछ तर्क देकर प्राप्त किए गए फलन उपयोगी होते हैं; उदाहरण के लिए, कई भाषाओं में समान कार्य या संचालिका होती है <code>plus_one</code>. आंशिक अनुप्रयोग इन फलनों को परिभाषित करना आसान बनाता है, उदाहरण के लिए एक फलन बनाकर जो इसके पहले तर्क के रूप में 1 बाउंड के साथ अतिरिक्त ऑपरेटर का प्रतिनिधित्व करता है। | ||
आंशिक अनुप्रयोग को एक निश्चित बिंदु पर एक निश्चित कार्य के मूल्यांकन के रूप में देखा जा सकता है, उदा। दिया गया <math>f \colon (X \times Y \times Z) \to N </math> तथा <math>a \in X</math> फिर <math>\text{curry}(\text{partial}(f)_a)(y)(z) = \text{curry}(f)(a)(y)(z) </math> या केवल <math>\text{partial}(f)_a = \text{curry}_1(f)(a) </math> कहाँ पे <math>\text{curry}_1</math> करी एफ का पहला पैरामीटर। | आंशिक अनुप्रयोग को एक निश्चित बिंदु पर एक निश्चित कार्य के मूल्यांकन के रूप में देखा जा सकता है, उदा। दिया गया <math>f \colon (X \times Y \times Z) \to N </math> तथा <math>a \in X</math> फिर <math>\text{curry}(\text{partial}(f)_a)(y)(z) = \text{curry}(f)(a)(y)(z) </math> या केवल <math>\text{partial}(f)_a = \text{curry}_1(f)(a) </math> कहाँ पे <math>\text{curry}_1</math> करी एफ का पहला पैरामीटर। |
Revision as of 15:36, 16 December 2022
गणित और कंप्यूटर विज्ञान में, करींग एक के मूल्यांकन का अनुवाद करने की विधि है जो फलनों के अनुक्रम (कंप्यूटर विज्ञान) का मूल्यांकन करने में कई तर्क लेता है, प्रत्येक एक तर्क के साथ। उदाहरण के लिए, एक कलन जो तीन तर्क लेता है, एक स्थिर एकल फलन बनाता है, ताकि संकेत
संकेत के समान मान देता है
या क्रम में कहा जाता है,
गणितीय भाषा में अधिकतर, एक फलन जो दो तर्क लेता है, एक से और दूसरे से , और में आउटपुट उत्पन्न करता है करीइंग द्वारा एक फलन में अनुवादित किया जाता है जो से एकल तर्क लेता है और से तक आउटपुट फ़ंक्शन के रूप में उत्पन्न करता है। यह इन दो प्रकार के फलनों के बीच एक स्वाभाविक एक-से-एक पत्राचार है, जिससे कि सेट (गणित) उनके बीच के फलनों के साथ एक कार्तीय बंद श्रेणी बनाते हैं। दो से अधिक तर्कों वाले फलन की करी को तब प्रेरण द्वारा परिभाषित किया जा सकता है। करी संबंधित है, लेकिन आंशिक अनुप्रयोग के समान नहीं है।
करी करना व्यावहारिक और सैद्धांतिक दोनों स्थितियों में उपयोगी है। कार्यात्मक प्रोग्रामिंग भाषाओं और कई अन्य भाषाओं में, यह स्वचालित रूप से प्रबंधित करने का एक विधि प्रदान करता है कि फलन और अपवादों के लिए तर्क कैसे पास किए जाते हैं। सैद्धांतिक कंप्यूटर विज्ञान में, यह सरल सैद्धांतिक मॉडल में कई तर्कों के साथ फलनों का अध्ययन करने का एक विधि प्रदान करता है जो केवल एक तर्क प्रदान करता है। करी और अनकरींग की सख्त धारणा के लिए सबसे सामान्य सेटिंग बंद मोनोइडल श्रेणी में है, जो क्वांटम यांत्रिकी, कोबोर्डिज्म और स्ट्रिंग सिद्धांत सहित कई अन्य संरचनाओं के साथ पत्राचार के लिए करी-हावर्ड पत्राचार के सबूत और कार्यक्रमों के विशाल सामान्यीकरण को रेखांकित करता है। .[1] यह गोटलॉब फ्रेज द्वारा प्रस्तुत किया गया था,[2][3] मूसा शॉनफिंकेल द्वारा विकसित,[3][4][5][6]
और आगे हास्केल करी द्वारा विकसित किया गया।[7][8]
अनकरींग द्वैत (गणित) को करी करने के लिए परिवर्तन है, और इसे निष्क्रियता के एक रूप के रूप में देखा जा सकता है। यह एक फलन (गणित) लेता है जिसका व्युत्क्रम मान एक और फलन है, और एक नया फलन उत्पन्न करता है जो पैरामीटर के रूप में दोनों के लिए तर्क लेता है, और परिणामस्वरूप उन तर्कों के लिए और बाद में,,का अनुप्रयोग करता है। और इस प्रक्रिया को पुनरावृत्त किया जा सकता है।
प्रेरणा
करींग उन फलनों के साथ काम करने का एक विधि प्रदान करता है जो कई तर्क लेते हैं, और उन्हें संरचनाओं में उपयोग करते हैं जहां फलन केवल एक तर्क ले सकते हैं। उदाहरण के लिए, कुछ विश्लेषणात्मक विधियों को केवल एक ही तर्क वाले फलनों पर लागू किया जा सकता है। व्यावहारिक कार्य अधिकांश इससे अधिक तर्क लेते हैं। फ्रीज ने दिखाया कि यह एकल तर्क स्थितियों के लिए समाधान प्रदान करने के लिए पर्याप्त था, क्योंकि एक फलन को कई तर्कों के साथ एकल-तर्क फलनों की श्रृंखला में बदलना संभव था। यह परिवर्तन अब करी के रूप में जानी जाने वाली प्रक्रिया है।[9] गणितीय विश्लेषण या कंप्यूटर प्रोग्रामिंग में सामान्यतः सामने आने वाले सभी सामान्य फलनों को नियंत्रित किया जा सकता है। चूंकि, ऐसी श्रेणियां हैं जिनमें करी बनाना संभव नहीं है; करीने की अनुमति देने वाली सबसे सामान्य श्रेणियां बंद मोनोइडल श्रेणी हैं।
कुछ प्रोग्रामिंग भाषा लगभग हमेशा कई तर्कों को प्राप्त करने के लिए करीबी फलनों का उपयोग करती हैं; उल्लेखनीय उदाहरण [[एमएल (प्रोग्रामिंग भाषा)]] और हास्केल (प्रोग्रामिंग भाषा) हैं, जहां दोनों स्थितियों में सभी फलनों में बिल्कुल एक तर्क होता है। यह गुण लैम्ब्डा कलन से विरासत में मिली है, जहां बहु-तर्क फलनों को सामान्यतः घुमावदार रूप में दर्शाया जाता है।
करी संबंधित है, लेकिन आंशिक अनुप्रयोग के समान नहीं है। अभ्यास में, क्लोजर (कंप्यूटर प्रोग्रामिंग) की प्रोग्रामिंग विधि का उपयोग आंशिक अनुप्रयोग और एक प्रकार की करींग करने के लिए किया जा सकता है, जो करी फलन के साथ यात्रा करने वाले वातावरण में तर्क छिपाकर करता है।
चित्रण
मान लीजिए हमारे पास एक कलन है जो दो वास्तविक संख्या () लेता है और वास्तविक संख्या को आउटपुट करता है, और इसके द्वारा परिभाषित किया जाता है. करींग इसे एक कलन में अनुवादित करता है जो एक वास्तविक तर्क लेता है और से फलनों को आउटपुट करता है. प्रतीकों में, , जहाँ उन सभी फलनों के सेट को दर्शाता है जो एक वास्तविक तर्क लेते हैं और वास्तविक आउटपुट उत्पन्न करते हैं। प्रत्येक वास्तविक संख्या के लिए , फलन को परिभाषित करें द्वारा , और उसके बाद फलन द्वारा को परिभाषित करें. तो उदाहरण के लिए, वह फलन है जो अपना वास्तविक तर्क आउटपुट के लिए , या भेजता है. हम इसे सामान्य तौर पर देखते हैं
ताकि मूल फलन और इसकी करी बिल्कुल समान जानकारी व्यक्त करें। ऐसी स्थिति में हम लिखते भी हैं
यह दो से अधिक तर्कों वाले फलनों के लिए भी काम करता है। यदि तीन तर्कों का एक फलन था, इसकी करी यह गुण होगा
इतिहास
"करींग" में "करी" तर्कशास्त्री हास्केल करी का एक संदर्भ है, जिन्होंने इस अवधारणा का व्यापक रूप से उपयोग किया था, लेकिन मोसेस शॉनफिंकेल को करी से 6 साल पहले यह विचार आया था।[10] वैकल्पिक नाम "शॉनफिंकेलाइजेशन" प्रस्तावित किया गया है।[11] गणितीय संदर्भ में, सिद्धांत को 1893 में गोटलॉब फ्रेज द्वारा काम करने के लिए वापस खोजा जा सकता है।[2][3]
करींग शब्द का जनक स्पष्ट नहीं है। डेविड टर्नर (कंप्यूटर वैज्ञानिक) का कहना है कि यह शब्द क्रिस्टोफर स्ट्रेची द्वारा अपने 1967 के व्याख्यान नोट्स में मौलिक अवधारणाओं को प्रोग्रामिंग भाषाओं में गढ़ा गया था।[12] लेकिन यद्यपि अवधारणा का उल्लेख किया गया है, नोटों में करी शब्द प्रकट नहीं होता है।[4] जॉन सी रेनॉल्ड्स ने 1972 के पेपर में करी को परिभाषित किया, लेकिन इस शब्द को गढ़ने का दावा नहीं किया।[5]
परिभाषा
एक अनौपचारिक परिभाषा के साथ शुरू करके करी को सबसे आसानी से समझा जा सकता है, जिसे बाद में कई अलग-अलग डोमेन में उपयुक्त करने के लिए बनाया जा सकता है। सबसे पहले, स्थापित करने के लिए कुछ संकेतन है। संकेतन और से से सभी फलन को दर्शाता है. यदि ऐसा एक फलन है, हम लिखते हैं . मान लीजिये के तत्वों के क्रमित जोड़े तथा को निरूपित करें वह है, तथा कार्तीय उत्पाद. यहां, तथा सेट हो सकते हैं, या वे प्रकार हो सकते हैं, या वे अन्य प्रकार के वस्तु हो सकते हैं, जैसा कि नीचे दिखाया गया है।
एक कलन दिया
- ,
करी एक नया फलन बनाता है
- .
अर्थात्, से तर्क लेता है और एक फलन देता है जो को पर मापता है. इसके द्वारा परिभाषित किया गया है
से तथा से के लिये. फिर हम भी लिखते हैं
अनकरींग व्युत्क्रम ट्रांसफ़ॉर्मेशन है, और इसके सही आसन्न, लागू | फलन के संदर्भ में सबसे आसानी से समझा जाता है
सेट सिद्धांत
सेट सिद्धांत में, संकेतन सेट से फलनों के सेट (गणित) सेट पर को निरूपित करने के लिए उपयोग किया जाता है. करी सेट से फलनों की से के बीच प्राकृतिक समानता है, और सेट से फलनों की फलनों के सेट से से . प्रतीकों में:
वास्तविक में, यह प्राकृतिक आपत्ति है जो फलनों के सेट के लिए घातीय संकेतन को सही ठहराती है। जैसा कि करीने के सभी उदाहरणों में होता है, ऊपर दिया गया सूत्र एक सहायक कारक का वर्णन करता है: प्रत्येक निश्चित सेट के लिए , काम करनेवाला प्रकार्यक के पास छोड़ दिया जाता है.
सेट की श्रेणी में, गणितीय वस्तु घातीय वस्तु कहा जाता है।
कलन रिक्त स्थानASHIF
फलन रिक्त स्थान के सिद्धांत में, जैसे कि कार्यात्मक विश्लेषण या होमोटॉपी सिद्धांत में, आमतौर पर टोपोलॉजिकल स्पेस स्थान के बीच निरंतर फलनों में रुचि होती है। एक लिखता है (मैं एक आदमी के रूप में काम करता हूं) से सभी फलनों के सेट के लिए से , और संकेतन का उपयोग करता है निरंतर फलनों के सबसेट को निरूपित करने के लिए। यहां, आक्षेप है
जबकि uncurrying उलटा नक्शा है। यदि सेट से निरंतर फलनों की से कॉम्पैक्ट-ओपन टोपोलॉजी दी जाती है, और यदि स्पेस तब स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ है
एक होमियोमोर्फिज्म है। ऐसा तब भी होता है जब , तथा कॉम्पैक्ट रूप से उत्पन्न स्थान हैं,[13]: chapter 5 [14] जबकि और भी स्थितियों हैं।[15][16] एक उपयोगी उपप्रमेय यह है कि एक फलन निरंतर होता है यदि और केवल यदि इसका करीड रूप निरंतर हो। एक अन्य महत्वपूर्ण परिणाम यह है कि लागू, जिसे आमतौर पर इस संदर्भ में मूल्यांकन कहा जाता है, निरंतर है (ध्यान दें कि eval कंप्यूटर विज्ञान में एक पूरी तरह से अलग अवधारणा है।) अर्थात,
निरंतर है जब कॉम्पैक्ट-ओपन है और स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ।[17] होमोटॉपी की निरंतरता को स्थापित करने के लिए ये दो परिणाम केंद्रीय हैं, अर्थात कब इकाई अंतराल है , ताकि या तो दो फलनों के होमोटॉपी के रूप में सोचा जा सकता है से , या, समतुल्य, एक एकल (निरंतर) पथ .
बीजगणितीय टोपोलॉजी
बीजगणितीय टोपोलॉजी में, करी एकमैन-हिल्टन द्वैत के उदाहरण के रूप में कार्य करता है, और, जैसे, विभिन्न सेटिंग्स में एक महत्वपूर्ण भूमिका निभाता है। उदाहरण के लिए, लूप स्पेस कम निलंबन के निकट है; इसे आमतौर पर इस रूप में लिखा जाता है
कहाँ पे नक्शों की होमोटॉपी कक्षाओं का सेट है , तथा ए का निलंबन (टोपोलॉजी) है, और ए का लूप स्पेस है। संक्षेप में, निलंबन के कार्टेशियन उत्पाद के रूप में देखा जा सकता है इकाई अंतराल के साथ, अंतराल को लूप में बदलने के लिए एक तुल्यता संबंध मॉड्यूल करें। कढ़ी रूप तब अंतरिक्ष को मैप करता है लूप्स से फ़ंक्शंस के स्थान पर , यानी से में .[17]फिर आसन्न फ़ंक्टर है जो लूप स्पेस के लिए निलंबन को मैप करता है, और अनकरीइंग डुअल है।[17]
मैपिंग कोन (टोपोलॉजी) और मैपिंग फाइबर (cofibration और कंपन) के बीच द्वंद्व[13]: chapters 6,7 करीने के एक रूप के रूप में समझा जा सकता है, जो बदले में लंबे सटीक अनुक्रम और कॉक्सैक्ट पपी अनुक्रमों के द्वंद्व की ओर जाता है।
समरूप बीजगणित में, करी और अनकरींग के बीच संबंध को टेंसर-होम संयोजन के रूप में जाना जाता है। यहाँ, एक दिलचस्प मोड़ उत्पन्न होता है: होम फ़ंक्टर और टेन्सर उत्पाद फ़ंक्टर एक सटीक क्रम में (गणित) नहीं उठा सकते हैं; यह Ext functor और Tor functor की परिभाषा की ओर ले जाता है।
डोमेन सिद्धांत
आदेश सिद्धांत में, अर्थात्, आंशिक रूप से आदेशित सेटों के जाली (क्रम) का सिद्धांत, जाली को स्कॉट टोपोलॉजी दिए जाने पर एक सतत कार्य होता है।[18] लैम्ब्डा कैलकुस के लिए शब्दार्थ प्रदान करने के प्रयास में स्कॉट-निरंतर फलनों की पहली बार जांच की गई थी (जैसा कि सामान्य सेट सिद्धांत ऐसा करने के लिए अपर्याप्त है)। अधिक सामान्यतः, स्कॉट-निरंतर फलनों का अध्ययन अब डोमेन सिद्धांत में किया जाता है, जिसमें कंप्यूटर एल्गोरिदम के सांकेतिक शब्दार्थ का अध्ययन शामिल है। ध्यान दें कि स्कॉट टोपोलॉजी टोपोलॉजिकल स्पेस की श्रेणी में आने वाली कई सामान्य टोपोलॉजी से काफी अलग है; स्कॉट टोपोलॉजी आमतौर पर अंतिम टोपोलॉजी है, और शांत स्थान नहीं है।
निरंतरता की धारणा होमोटोपी प्रकार के सिद्धांत में प्रकट होती है, जहां, मोटे तौर पर बोलना, दो कंप्यूटर प्रोग्रामों को होमोटोपिक माना जा सकता है, अर्थात समान परिणामों की गणना करें, यदि वे एक से दूसरे में लगातार संकेत रीफैक्टरिंग कर सकते हैं।
लैम्ब्डा गणना
सैद्धांतिक कंप्यूटर विज्ञान में, करींग लैम्ब्डा कैलकुस जैसे बहुत ही सरल सैद्धांतिक मॉडल में कई तर्कों के साथ फलनों का अध्ययन करने का एक विधि प्रदान करता है, जिसमें कार्य केवल एक तर्क लेते हैं। एक कलन पर विचार करें दो तर्क लेना, और प्रकार रखना , जिसका अर्थ यह समझा जाना चाहिए कि x का प्रकार होना चाहिए , y का प्रकार होना चाहिए , और फलन स्वयं प्रकार लौटाता है . F के कढ़ी रूप को परिभाषित किया गया है
कहाँ पे लैम्ब्डा कैलकुलस का अमूर्त है। चूंकि करी, इनपुट के रूप में, प्रकार के साथ कार्य करती है , कोई निष्कर्ष निकालता है कि करी का प्रकार ही है
→ ऑपरेटर को अक्सर सही सहयोगी माना जाता है, इसलिए करी फलन प्रकार अक्सर के रूप में लिखा जाता है . इसके विपरीत, कलन आवेदन को ऑपरेटर सहयोगीता माना जाता है | बाएं-सहयोगी, ताकि के बराबर है
- .
यही है, आवेदन के क्रम को स्पष्ट करने के लिए कोष्ठक की आवश्यकता नहीं है।
करीबी फलनों का उपयोग किसी भी प्रोग्रामिंग भाषा में किया जा सकता है जो क्लोजर (कंप्यूटर विज्ञान) का समर्थन करता है; हालांकि, अनिश्चित फलनों को सामान्यतः दक्षता कारणों से पसंद किया जाता है, क्योंकि आंशिक अनुप्रयोग के ऊपरी हिस्से और बंद करने के निर्माण को अधिकांश फलन कॉलों के लिए टाला जा सकता है।
प्रकार सिद्धांत
प्रकार के सिद्धांत में, कंप्यूटर विज्ञान में एक प्रकार की प्रणाली के सामान्य विचार को एक विशिष्ट बीजगणित के प्रकारों में औपचारिक रूप दिया जाता है। उदाहरण के लिए, लिखते समय , आशय यह है तथा टाइप सिस्टम हैं, जबकि एरो एक प्रकार कंस्ट्रक्टर टाइप करें है, विशेष रूप से, फलन प्रकार या तीर प्रकार। इसी तरह, कार्टेशियन उत्पाद प्रकार का निर्माण उत्पाद प्रकार कन्स्ट्रक्टर द्वारा किया जाता है .
प्रकार-सैद्धांतिक दृष्टिकोण प्रोग्रामिंग भाषाओं जैसे एमएल (प्रोग्रामिंग भाषा) और उससे प्राप्त और प्रेरित भाषाओं में व्यक्त किया गया है: सीएएमएल, हास्केल (प्रोग्रामिंग भाषा) और एफ शार्प (प्रोग्रामिंग भाषा) | एफ #।
प्रकार-सैद्धांतिक दृष्टिकोण श्रेणी सिद्धांत की भाषा के लिए एक स्वाभाविक पूरक प्रदान करता है, जैसा कि नीचे चर्चा की गई है। ऐसा इसलिए है क्योंकि श्रेणियों, और विशेष रूप से, मोनोइडल श्रेणियों में एक आंतरिक भाषा होती है, जिसमें साधारण रूप से टाइप की गई लैम्ब्डा कैलकुलस ऐसी भाषा का सबसे प्रमुख उदाहरण है। यह इस संदर्भ में महत्वपूर्ण है, क्योंकि इसे एक प्रकार के कंस्ट्रक्टर, एरो टाइप से बनाया जा सकता है। इसके बाद करी भाषा को एक प्राकृतिक उत्पाद प्रकार प्रदान करती है। श्रेणियों और प्रकारों में वस्तुओं के बीच पत्राचार तब प्रोग्रामिंग भाषाओं को लॉजिक्स (करी-हावर्ड पत्राचार के माध्यम से) और अन्य प्रकार की गणितीय प्रणालियों के रूप में फिर से व्याख्या करने की अनुमति देता है, जैसा कि आगे की खोज की गई है।
तर्क
करी-हावर्ड पत्राचार के तहत, करी और अनकरींग का अस्तित्व तार्किक प्रमेय के बराबर है , क्योंकि टुपल्स (उत्पाद प्रकार) तर्क में संयोजन से मेल खाता है, और फलन प्रकार निहितार्थ से मेल खाता है।
घातीय वस्तु Heyting algebras की श्रेणी में सामान्य रूप से सामग्री सशर्त के रूप में लिखा जाता है . वितरण हेटिंग बीजगणित बूलियन बीजगणित हैं, और घातीय वस्तु का स्पष्ट रूप है , इस प्रकार यह स्पष्ट करता है कि घातीय वस्तु वास्तव में भौतिक निहितार्थ (अनुमान का नियम) है।[19]
श्रेणी सिद्धांत
करीइंग और अनकरींग की उपरोक्त धारणाएं श्रेणी सिद्धांत में उनके सबसे सामान्य, अमूर्त कथन को खोजती हैं। Currying एक घातीय वस्तु की एक सार्वभौमिक संपत्ति है, और कार्टेशियन बंद श्रेणी में एक संयोजन (श्रेणी सिद्धांत) को जन्म देती है। अर्थात्, एक उत्पाद (श्रेणी सिद्धांत) से रूपवाद (श्रेणी सिद्धांत) के बीच एक प्राकृतिक परिवर्तन समरूपता है। और एक घातीय वस्तु के लिए morphisms .
यह बंद मोनोइडल श्रेणी में एक व्यापक परिणाम के लिए सामान्यीकरण करता है: करीइंग यह कथन है कि मोनोइडल श्रेणी और आंतरिक होम आसन्न फ़ैक्टर हैं; यानी हर वस्तु के लिए एक प्राकृतिक परिवर्तन है:
यहाँ, होम श्रेणी में सभी morphisms के (बाहरी) होम-फ़ंक्टर को दर्शाता है, जबकि बंद monoidal श्रेणी में आंतरिक होम functor को दर्शाता है। समुच्चयों की श्रेणी के लिए, दोनों समान हैं। जब उत्पाद कार्तीय उत्पाद है, तो आंतरिक होम घातीय वस्तु बन जाती है .
करी दो तरह से टूट सकती है। एक यह है कि यदि कोई श्रेणी बंद श्रेणी नहीं है, और इस प्रकार एक आंतरिक होम फ़ैक्टर की कमी है (संभवतः क्योंकि इस तरह के फ़ैक्टर के लिए एक से अधिक विकल्प हैं)। दूसरा विधि यह है कि यदि यह मोनोइडल श्रेणी नहीं है, और इस प्रकार एक उत्पाद की कमी है (अर्थात, वस्तुओं के जोड़े को लिखने का एक विधि नहीं है)। जिन श्रेणियों में उत्पाद और आंतरिक होम दोनों होते हैं, वे बिल्कुल बंद मोनोइडल श्रेणियां हैं।
शास्त्रीय तर्क की चर्चा के लिए कार्टेशियन बंद श्रेणियों की सेटिंग पर्याप्त है; बंद मोनोइडल श्रेणियों की अधिक सामान्य सेटिंग क्वांटम संगणना के लिए उपयुक्त है।[20] इन दोनों के बीच का अंतर यह है कि कार्टेशियन श्रेणियों के लिए उत्पाद (गणित) (जैसे सेट की श्रेणी, पूर्ण आंशिक ऑर्डर या हेटिंग बीजगणित) केवल कार्टेशियन उत्पाद है; इसकी व्याख्या वस्तुओं की एक क्रमबद्ध जोड़ी (या एक सूची) के रूप में की जाती है। बस टाइप किया गया लैम्ब्डा कैलकुस कार्टेशियन बंद श्रेणियों की आंतरिक भाषा है; और यह इस कारण से है कि जोड़े और सूचियाँ LISP, योजना (प्रोग्रामिंग भाषा) और कई कार्यात्मक प्रोग्रामिंग भाषाओं के प्रकार सिद्धांत में प्राथमिक प्रकार की प्रणाली हैं।
इसके विपरीत, मोनोइडल श्रेणी के लिए उत्पाद (जैसे हिल्बर्ट अंतरिक्ष और कार्यात्मक विश्लेषण के वेक्टर रिक्त स्थान) टेंसर उत्पाद है। ऐसी श्रेणियों की आंतरिक भाषा रेखीय तर्क है, जो क्वांटम तर्क का एक रूप है; इसी प्रकार की प्रणाली रैखिक प्रकार की प्रणाली है। ऐसी श्रेणियां उलझी हुई क्वांटम अवस्थाओं का वर्णन करने के लिए उपयुक्त हैं, और, अधिक सामान्यतः, करी-हावर्ड पत्राचार को क्वांटम यांत्रिकी, बीजगणितीय टोपोलॉजी में coboardism और स्ट्रिंग सिद्धांत के लिए एक विशाल सामान्यीकरण की अनुमति देती हैं।[1] रेखीय प्रकार प्रणाली, और रेखीय तर्क तुल्यकालन आदिमों का वर्णन करने के लिए उपयोगी होते हैं, जैसे पारस्परिक बहिष्करण ताले, और वेंडिंग मशीनों का संचालन।
== आंशिक फलन एप्लिकेशन == के साथ तुलना करें
करी और आंशिक कार्य अनुप्रयोग अक्सर मिश्रित होते हैं।[21] दोनों के बीच महत्वपूर्ण अंतरों में से एक यह है कि आंशिक रूप से लागू किए गए फलन के लिए कॉल तुरंत परिणाम देता है, करींग श्रृंखला के नीचे कोई अन्य फलन नहीं; इस भेद को उन फलनों के लिए स्पष्ट रूप से चित्रित किया जा सकता है जिनकी संख्या दो से अधिक है।[22] प्रकार का एक कार्य दिया , करी पैदा करता है . यही है, जबकि पहले फलन का मूल्यांकन इस रूप में प्रदर्शित किया जा सकता है , करीबी कलन के मूल्यांकन के रूप में प्रतिनिधित्व किया जाएगा , प्रत्येक तर्क को पिछले मंगलाचरण द्वारा लौटाए गए एकल-तर्क फलन के बदले में लागू करना। ध्यान दें कि कॉल करने के बाद , हम एक ऐसे फलन के साथ बचे हैं जो एक तर्क लेता है और दूसरा फलन देता है, न कि एक ऐसा फलन जो दो तर्क लेता है।
इसके विपरीत, आंशिक फलन एप्लिकेशन एक फलन के लिए कई तर्कों को ठीक करने की प्रक्रिया को संदर्भित करता है, जो कि छोटे arity के दूसरे फलन का निर्माण करता है। की परिभाषा दी ऊपर, हम पहले तर्क को ठीक (या 'बाइंड') कर सकते हैं, जिससे एक प्रकार का फलन तैयार होता है . इस कलन के मूल्यांकन के रूप में प्रतिनिधित्व किया जा सकता है . ध्यान दें कि इस स्थितियों में आंशिक फलन एप्लिकेशन का परिणाम एक ऐसा फलन है जो दो तर्क लेता है।
सहज रूप से, आंशिक फलन एप्लिकेशन कहता है कि यदि आप फलन के पहले पैरामीटर (कंप्यूटर विज्ञान) को ठीक करते हैं, तो आपको शेष तर्कों का एक फलन मिलता है। उदाहरण के लिए, यदि फलन div डिवीजन ऑपरेशन x/y के लिए खड़ा है, तो पैरामीटर x के साथ div 1 पर तय किया गया है (यानी, div 1) एक और फलन है: फलन inv के समान जो इसके तर्क के गुणात्मक व्युत्क्रम को परिभाषित करता है, परिभाषित आमंत्रण द्वारा (y) = 1/y.
आंशिक अनुप्रयोग के लिए व्यावहारिक अभिप्रेरणा यह है कि बहुत बार किसी फलन के लिए सभी नहीं बल्कि कुछ तर्क देकर प्राप्त किए गए फलन उपयोगी होते हैं; उदाहरण के लिए, कई भाषाओं में समान कार्य या संचालिका होती है plus_one
. आंशिक अनुप्रयोग इन फलनों को परिभाषित करना आसान बनाता है, उदाहरण के लिए एक फलन बनाकर जो इसके पहले तर्क के रूप में 1 बाउंड के साथ अतिरिक्त ऑपरेटर का प्रतिनिधित्व करता है।
आंशिक अनुप्रयोग को एक निश्चित बिंदु पर एक निश्चित कार्य के मूल्यांकन के रूप में देखा जा सकता है, उदा। दिया गया तथा फिर या केवल कहाँ पे करी एफ का पहला पैरामीटर।
इस प्रकार, आंशिक अनुप्रयोग एक निश्चित बिंदु पर एक करीबी कलन में कम हो जाता है। इसके अलावा, एक निश्चित बिंदु पर एक घुमावदार कार्य (तुच्छ रूप से), एक आंशिक अनुप्रयोग है। अधिक साक्ष्य के लिए, ध्यान दें कि, कोई भी कार्य दिया गया है , एक कलन इस प्रकार परिभाषित किया जा सकता है . इस प्रकार, किसी भी आंशिक आवेदन को एक करी ऑपरेशन में घटाया जा सकता है। जैसे, करी को एक ऑपरेशन के रूप में अधिक उपयुक्त रूप से परिभाषित किया गया है, जो कई सैद्धांतिक मामलों में, अक्सर पुनरावर्ती रूप से लागू होता है, लेकिन जो सैद्धांतिक रूप से अप्रभेद्य है (जब एक ऑपरेशन के रूप में माना जाता है) आंशिक आवेदन से।
तो, एक आंशिक अनुप्रयोग को कुछ फलन के इनपुट के कुछ क्रम पर करी ऑपरेटर के एकल अनुप्रयोग के उद्देश्य परिणाम के रूप में परिभाषित किया जा सकता है।
यह भी देखें
- टेंसर-होम संयोजन
- आलसी मूल्यांकन
- क्लोजर (कंप्यूटर साइंस)
- एसएमएन प्रमेय |S m
n प्रमेय - बंद मोनोइडल श्रेणी
टिप्पणियाँ
- ↑ 1.0 1.1 John C. Baez and Mike Stay, "Physics, Topology, Logic and Computation: A Rosetta Stone", (2009) ArXiv 0903.0340 in New Structures for Physics, ed. Bob Coecke, Lecture Notes in Physics vol. 813, Springer, Berlin, 2011, pp. 95-174.
- ↑ 2.0 2.1 Gottlob Frege, Grundgesetze der Arithmetik I, Jena: Verlag Hermann Pohle, 1893, §36.
- ↑ 3.0 3.1 3.2 Willard Van Orman Quine, introduction to Moses Schönfinkel's "Bausteine der mathematischen Logik", pp. 355–357, esp. 355. Translated by Stefan Bauer-Mengelberg as "On the building blocks of mathematical logic" in Jean van Heijenoort (1967), A Source Book in Mathematical Logic, 1879–1931. Harvard University Press, pp. 355–66.
- ↑ 4.0 4.1 Strachey, Christopher (2000). "प्रोग्रामिंग भाषाओं में मौलिक अवधारणाएँ". Higher-Order and Symbolic Computation. 13: 21. CiteSeerX 10.1.1.332.3161. doi:10.1023/A:1010000313106. S2CID 14124601.
एकल ऑपरेंड ऑपरेटरों के क्रमिक अनुप्रयोग के लिए कई ऑपरेंड वाले ऑपरेटरों को कम करने के लिए शॉनफिंकेल द्वारा उत्पन्न एक उपकरण है।
(Reprinted lecture notes from 1967.) - ↑ 5.0 5.1 Reynolds, John C. (1972). "हायर-ऑर्डर प्रोग्रामिंग लैंग्वेज के लिए डेफिनिशनल इंटरप्रेटर". Proceedings of the ACM Annual Conference. 2 (4): 717–740. doi:10.1145/800194.805852. S2CID 163294.
अंतिम पंक्ति में हमने बाइनरी ऑपरेशन को एक भाषा में शुरू करने की समस्या को हल करने के लिए करीइंग (तर्कशास्त्री एच. करी के बाद) नामक एक ट्रिक का उपयोग किया है जहां सभी कार्यों को एक ही तर्क को स्वीकार करना होगा। (रेफरी की टिप्पणी है कि हालांकि "करीइंग" स्वादिष्ट है, "शॉनफिंकेलिंग" अधिक सटीक हो सकता है।)
- ↑ Kenneth Slonneger and Barry L. Kurtz. Formal Syntax and Semantics of Programming Languages. 1995. p. 144.
- ↑ Henk Barendregt, Erik Barendsen, "Introduction to Lambda Calculus", March 2000, page 8.
- ↑ Curry, Haskell; Feys, Robert (1958). संयोजन तर्क. Vol. I (2 ed.). Amsterdam, Netherlands: North-Holland Publishing Company.
- ↑ Graham Hutton. "Comp.lang.functional के लिए अक्सर पूछे जाने वाले प्रश्न: Currying". nott.ac.uk.
- ↑ Curry, Haskell B. (1980). "कॉम्बिनेटरी लॉजिक के कुछ दार्शनिक पहलू". Studies in Logic and the Foundations of Mathematics. 101: 85–101. doi:10.1016/S0049-237X(08)71254-0. ISBN 9780444853455.
कुछ समकालीन तर्कशास्त्री किसी फलन को देखने के इस तरीके को "करीइंग" कहते हैं, क्योंकि मैंने इसका व्यापक उपयोग किया है; लेकिन स्कोनफिंकल को इसका विचार मुझसे 6 साल पहले आया था।
- ↑ I. Heim and A. Kratzer (1998). Semantics in Generative Grammar. Blackwell.
- ↑ Turner, David (1 Jun 1997). "प्रोग्रामिंग लैंग्वेज, करीइंग, या शोनफिंकलिंग?". computer-programming-forum.com. Retrieved 3 March 2022.
- ↑ 13.0 13.1 J.P. May, A Concise Course in Algebraic Topology, (1999) Chicago Lectures in Mathematics ISBN 0-226-51183-9
- ↑ Compactly generated topological space at the nLab
- ↑ P. I. Booth and J. Tillotson, "Monoidal closed, Cartesian closed and convenient categories of topological spaces", Pacific Journal of Mathematics, 88 (1980) pp.33-53.
- ↑ Convenient category of topological spaces at the nLab
- ↑ 17.0 17.1 17.2 Joseph J. Rotman, An Introduction to Algebraic Topology (1988) Springer-Verlag ISBN 0-387-96678-1 (See Chapter 11 for proof.)
- ↑ Barendregt, H.P. (1984). लैम्ब्डा कैलकुलस. North-Holland. ISBN 978-0-444-87508-2. (See theorems 1.2.13, 1.2.14)
- ↑ Saunders Mac Lane and Ieke Moerdijk, Sheaves in Geometry and Logic (1992) Springer ISBN 0-387-97710-4 (See Chapter 1, pp.48-57)
- ↑ Samson Abramsky and Bob Coecke, "A Categorical Semantics for Quantum Protocols."
- ↑ "द अनकार्व्ड ब्लॉग: आंशिक कार्य अनुप्रयोग करी नहीं है". uncarved.com. Archived from the original on 2016-10-23.
- ↑ "5 मिनट में कार्यात्मक प्रोग्रामिंग". Slides.
संदर्भ
- Schönfinkel, Moses (1924). "Über die Bausteine der mathematischen Logik". Math. Ann. 92 (3–4): 305–316. doi:10.1007/BF01448013. S2CID 118507515.
- Heim, Irene; Kratzer, Angelika (1998). Semantics in a Generative Grammar. Malden: Blackwall Publishers. ISBN 0-631-19712-5.
इस पेज में लापता आंतरिक लिंक की सूची
- अंक शास्त्र
- कलन (गणित)
- आंशिक आवेदन
- लैम्ब्डा कैलकुलस
- प्रोग्रामिंग भाषाओं में मौलिक अवधारणाएँ
- क्रमित युग्म
- कार्तीय गुणन
- समुच्चय सिद्धान्त
- कलन स्थान
- द्विभाजन
- अगर और केवल अगर
- होमोटॉपी वर्ग
- सहायक संचालिका
- लिफ्ट (गणित)
- लंबा सटीक क्रम
- टेंसर उत्पाद
- गुड़िया अनुक्रम
- जाली (आदेश)
- होमोटॉपी प्रकार सिद्धांत
- ऑपरेटर साहचर्य
- क्लोजर (कंप्यूटर साइंस)
- प्रकार प्रणाली
- कलन प्रकार
- सरल रूप से टाइप किया हुआ लैम्ब्डा कैलकुलस
- मोनोइडल श्रेणियां
- टपल
- सामग्री निहितार्थ (अनुमान का नियम)
- समाकृतिकता
- क्वांटम गणना
- बस टाइप किया हुआ लैम्ब्डा कैलकुलस
- पूर्ण आंशिक आदेश
- सदिश स्थल
- रैखिक प्रकार प्रणाली
- रैखिक तर्क
- उलझी हुई क्वांटम अवस्थाएँ
- arity
बाहरी संबंध
- Currying Schonfinkelling at the Portland Pattern Repository
- Currying != Generalized Partial Application! - post at Lambda-the-Ultimate.org