फंक्शन प्रकार: Difference between revisions
m (Abhishek moved page फ़ंक्शन प्रकार to फलन प्रकार without leaving a redirect) |
No edit summary |
||
Line 1: | Line 1: | ||
[[कंप्यूटर विज्ञान]] और [[गणितीय तर्क|गणितीय नियम]] में, ''' | [[कंप्यूटर विज्ञान]] और [[गणितीय तर्क|गणितीय नियम]] में, '''फंक्शन प्रकार''' (या तीर प्रकार या घातांक) [[चर (कंप्यूटर विज्ञान)|वेरिएबल (कंप्यूटर विज्ञान)]] या पैरामीटर (कंप्यूटर विज्ञान) का प्रकार होता है, जिसमें फंक्शन (कंप्यूटर विज्ञान) को सौंपा जा सकता है, इस प्रकार से नियम या किसी भी फंक्शन को या एक उच्च-क्रम फंक्शन लेने या लौटने का [[गणितीय तर्क|नियम]] या परिणाम प्रकार होता है | ||
इस प्रकार से | इस प्रकार से फंक्शन प्रकार पैरामीटर के प्रकार और फंक्शन के परिणाम प्रकार पर निर्भर करता है (यह, या अधिक स्पष्ट रूप से अप्रयुक्त प्रकार कंस्ट्रक्टर <code>{{nowrap|· → ·}}</code>, उच्च प्रकार का प्रकार है) । किन्तु सैद्धांतिक समुच्चय और [[प्रोग्रामिंग भाषा]]ओं में जहां फंक्शन को निश्चित रूप में परिभाषित किया जाता है, जैसे कि बस टाइप किया गया लैम्ब्डा कैलकुलस, एक फंक्शन प्रकार बिल्कुल दो प्रकारों पर निर्भर करता है, डोमेन ''A'' और रेंज ''B''। यहां एक फंक्शन प्रकार को सदैव गणितीय फंक्शन के बाद द्वारा ''A'' → ''B'', दर्शाया जाता है , या {{math|''B''<sup>''A''</sup>}} वहां उपस्तिथ ा बिल्कुल {{math|''B''<sup>''A''</sup>}} ([[घातीय वस्तु|घातीय रूप से]] कई) समुच्चय -सैद्धांतिक फंक्शन के आधार पर [[सेट की श्रेणी|समुच्चय की श्रेणी]] में ''A'' से ''B'' तक मैपिंग करता है। ऐसे मानचित्रों या फंक्शन के वर्ग को घातीय वस्तु कहा जाता है। [[करी|करीइंग]] का कार्य फंक्शन प्रकार को उत्पाद प्रकार से जोड़ देता है; करीइंग पर लेख में इस पर विस्तार से चर्चा की गई है। | ||
अतः | अतः फंक्शन प्रकार को आश्रित प्रकार या औपचारिक परिभाषा का विशेष स्तिथियों में माना जा सकता है, जोकी अन्य गुणों के मध्य , [[बहुरूपता (कंप्यूटर विज्ञान)|बहुरूपी (कंप्यूटर विज्ञान)]] के विचार को सम्मिलित करता है। | ||
== प्रोग्रामिंग भाषाएँ == | == प्रोग्रामिंग भाषाएँ == | ||
इस प्रकार से कई प्रोग्रामिंग भाषाओं में | इस प्रकार से कई प्रोग्रामिंग भाषाओं में फंक्शन प्रकारों के लिए उपयोग किए जाने वाले सिंटैक्स को संक्षेप में प्रस्तुत किया जा सकता है, जिसमें उच्च-क्रम फंक्शन संरचना (कंप्यूटर विज्ञान) फंक्शन के लिए उदाहरण प्रकार हस्ताक्षर सम्मिलित किये जाते है: | ||
{| class=wikitable | {| class=wikitable | ||
|- | |- | ||
! colspan=2 | | ! colspan=2 |लैंग्वेज | ||
!नोटेशन | |||
! उदाहरण प्रकार के हस्ताक्षर (Example type signature) | |||
|- | |- | ||
| rowspan=7 | With | | rowspan=7 | प्रथम श्रेणी के कार्यों के साथ, | ||
पैरामीट्रिक बहुरूपता | |||
(With first-class functions,<br> parametric polymorphism) | |||
| [[C Sharp (programming language)|C#]] | | [[C Sharp (programming language)|C#]] | ||
| <code>Func<''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>,''ρ''></code> | | <code>Func<''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>,''ρ''></code> | ||
Line 40: | Line 45: | ||
| {{code|2=rust|fn compose<A, B, C>(f: fn(A) -> B, g: fn(B) -> C) -> fn(A) -> C}} | | {{code|2=rust|fn compose<A, B, C>(f: fn(A) -> B, g: fn(B) -> C) -> fn(A) -> C}} | ||
|- | |- | ||
| rowspan=2 | With | | rowspan=2 | (प्रथम श्रेणी के कार्यों के साथ, | ||
पैरामीट्रिक बहुरूपता के बिना) | |||
With first-class functions,<br>without parametric polymorphism | |||
| [[Go (programming language)|Go]] | | [[Go (programming language)|Go]] | ||
| <code>func(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>) ''ρ''</code> | | <code>func(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>) ''ρ''</code> | ||
Line 49: | Line 57: | ||
| {{code|2=objc|int (^compose(int (^f)(int), int (^g)(int)))(int);}} | | {{code|2=objc|int (^compose(int (^f)(int), int (^g)(int)))(int);}} | ||
|- | |- | ||
| rowspan=2 | Without | | rowspan=2 | प्रथम श्रेणी के कार्यों के बिना, | ||
पैरामीट्रिक बहुरूपता | |||
(Without first-class functions,<br> parametric polymorphism) | |||
| [[C (programming language)|C]] | | [[C (programming language)|C]] | ||
| <code>''ρ'' (*)(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>)</code> | | <code>''ρ'' (*)(''α''<sub>1</sub>,''α''<sub>2</sub>,...,''α''<sub>''n''</sub>)</code> | ||
Line 60: | Line 71: | ||
|} | |} | ||
इस प्रकार से उदाहरण के लिए C# के उदाहरण प्रकार के हस्ताक्षर को देखते समय, | इस प्रकार से उदाहरण के लिए C# के उदाहरण प्रकार के हस्ताक्षर को देखते समय, फंक्शन का प्रकार {{code|कंपोज़}} वास्तव में <code>Func<Func<A,B>,Func<B,C>,Func<A,C>>है</code>. | ||
सी++11 के std::फंक्शन में टाइप इरेज़र के कारण, उच्च ऑर्डर फ़ंक्शन पैरामीटर के लिए टेम्पलेट और क्लोजर के लिए टाइप अनुमान (ऑटो) का उपयोग करना अधिक समान होता है। | |||
== सांकेतिक शब्दार्थ == | == सांकेतिक शब्दार्थ == | ||
प्रोग्रामिंग भाषाओं में | प्रोग्रामिंग भाषाओं में फंक्शन प्रकार सभी समुच्चय -सैद्धांतिक फंक्शन के स्थान के अनुरूप नहीं है। डोमेन के रूप में अनगिनत प्रकार की [[प्राकृतिक संख्या]]ओं और रेंज के रूप में बूलियन को देखते हुए, अनगिनत अनंत संख्या (2<sup>ℵ<sub>0</sub></sup> = c) होती है उनके मध्य समुच्चय -सैद्धांतिक कार्यों की [[सातत्य की प्रमुखता]])। स्पष्ट रूप से फंक्शन का यह स्थान किसी भी प्रोग्रामिंग भाषा में परिभाषित किए जा सकने वाले फंक्शन की संख्या से उच्च है, क्योंकि केवल गिनती के कई प्रोग्राम उपस्तिथ हैं ( प्रोग्राम सीमित संख्या में प्रतीकों का सीमित अनुक्रम है) और समुच्चय -सैद्धांतिक फंक्शन में से [[रुकने की समस्या|हाल्टिंग समस्या ]] को प्रभावी ढंग से हल करता है। | ||
इस प्रकार से | इस प्रकार से फंक्शन प्रकारों जैसे प्रोग्रामिंग भाषा अवधारणाओं को मॉडल करने के लिए अधिक उपयुक्त मॉडल (जिसे [[डोमेन सिद्धांत]] कहा जाता है) खोजने के साथ [[सांकेतिक शब्दार्थ]] का संबंध होता है। यह पता चला है कि अभिव्यक्ति को [[गणना योग्य कार्य]] के समुच्चय तक सीमित करना पर्याप्त नहीं होते है यदि प्रोग्रामिंग भाषा गैर-समाप्ति गणना लिखने की अनुमति देती है (यदि प्रोग्रामिंग भाषा ट्यूरिंग पूर्ण है तो यही स्थिति है)। अभिव्यक्ति तथाकथित सतत कार्यों तक ही सीमित होनी चाहिए या आंशिक रूप से क्रमित समुच्चय के मध्य निरंतर कार्य (स्कॉट टोपोलॉजी में निरंतरता के अनुरूप, वास्तविक विश्लेषणात्मक अर्थ में निरंतरता नहीं)। इसके अतिरिक्त , निरंतर फंक्शन के समुच्चय में समानांतर-या फंक्शन सम्मिलित होता है, जिसे सभी प्रोग्रामिंग भाषाओं में सही ढंग से परिभाषित नहीं किया जा सकता है। | ||
== यह भी देखें == | == यह भी देखें == | ||
Line 73: | Line 84: | ||
*करी | *करी | ||
* घातांकीय वस्तु, श्रेणी-सैद्धांतिक समतुल्य | * घातांकीय वस्तु, श्रेणी-सैद्धांतिक समतुल्य | ||
* | * प्रथम श्रेणी का फंक्शन | ||
* | * फंक्शन स्पेस, समुच्चय -सैद्धांतिक समकक्ष | ||
== संदर्भ == | == संदर्भ == | ||
Line 81: | Line 92: | ||
* {{nlab|id=function+type|title=function type}} | * {{nlab|id=function+type|title=function type}} | ||
* [http://homotopytypetheory.org/2013/06/20/the-hott-book/ ''Homotopy Type Theory: Univalent Foundations of Mathematics'', The Univalent Foundations Program, Institute for Advanced Study]. ''See section 1.2''. | * [http://homotopytypetheory.org/2013/06/20/the-hott-book/ ''Homotopy Type Theory: Univalent Foundations of Mathematics'', The Univalent Foundations Program, Institute for Advanced Study]. ''See section 1.2''. | ||
[[Category: डेटा के प्रकार]] [[Category: सबरूटीन्स]] [[Category: प्रकार सिद्धांत]] | [[Category: डेटा के प्रकार]] [[Category: सबरूटीन्स]] [[Category: प्रकार सिद्धांत]] | ||
Revision as of 12:32, 7 July 2023
कंप्यूटर विज्ञान और गणितीय नियम में, फंक्शन प्रकार (या तीर प्रकार या घातांक) वेरिएबल (कंप्यूटर विज्ञान) या पैरामीटर (कंप्यूटर विज्ञान) का प्रकार होता है, जिसमें फंक्शन (कंप्यूटर विज्ञान) को सौंपा जा सकता है, इस प्रकार से नियम या किसी भी फंक्शन को या एक उच्च-क्रम फंक्शन लेने या लौटने का नियम या परिणाम प्रकार होता है
इस प्रकार से फंक्शन प्रकार पैरामीटर के प्रकार और फंक्शन के परिणाम प्रकार पर निर्भर करता है (यह, या अधिक स्पष्ट रूप से अप्रयुक्त प्रकार कंस्ट्रक्टर · → ·
, उच्च प्रकार का प्रकार है) । किन्तु सैद्धांतिक समुच्चय और प्रोग्रामिंग भाषाओं में जहां फंक्शन को निश्चित रूप में परिभाषित किया जाता है, जैसे कि बस टाइप किया गया लैम्ब्डा कैलकुलस, एक फंक्शन प्रकार बिल्कुल दो प्रकारों पर निर्भर करता है, डोमेन A और रेंज B। यहां एक फंक्शन प्रकार को सदैव गणितीय फंक्शन के बाद द्वारा A → B, दर्शाया जाता है , या BA वहां उपस्तिथ ा बिल्कुल BA (घातीय रूप से कई) समुच्चय -सैद्धांतिक फंक्शन के आधार पर समुच्चय की श्रेणी में A से B तक मैपिंग करता है। ऐसे मानचित्रों या फंक्शन के वर्ग को घातीय वस्तु कहा जाता है। करीइंग का कार्य फंक्शन प्रकार को उत्पाद प्रकार से जोड़ देता है; करीइंग पर लेख में इस पर विस्तार से चर्चा की गई है।
अतः फंक्शन प्रकार को आश्रित प्रकार या औपचारिक परिभाषा का विशेष स्तिथियों में माना जा सकता है, जोकी अन्य गुणों के मध्य , बहुरूपी (कंप्यूटर विज्ञान) के विचार को सम्मिलित करता है।
प्रोग्रामिंग भाषाएँ
इस प्रकार से कई प्रोग्रामिंग भाषाओं में फंक्शन प्रकारों के लिए उपयोग किए जाने वाले सिंटैक्स को संक्षेप में प्रस्तुत किया जा सकता है, जिसमें उच्च-क्रम फंक्शन संरचना (कंप्यूटर विज्ञान) फंक्शन के लिए उदाहरण प्रकार हस्ताक्षर सम्मिलित किये जाते है:
लैंग्वेज | नोटेशन | उदाहरण प्रकार के हस्ताक्षर (Example type signature) | |
---|---|---|---|
प्रथम श्रेणी के कार्यों के साथ,
पैरामीट्रिक बहुरूपता (With first-class functions, |
C# | Func<α1,α2,...,αn,ρ>
|
Func<A,C> compose(Func<B,C> f, Func<A,B> g);
|
Haskell | α -> ρ
|
compose :: (b -> c) -> (a -> b) -> a -> c
| |
OCaml | α -> ρ
|
compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
| |
Scala | (α1,α2,...,αn) => ρ
|
def compose[A, B, C](f: B => C, g: A => B): A => C
| |
Standard ML | α -> ρ
|
compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
| |
Swift | α -> ρ
|
func compose<A,B,C>(f: (B) -> C, g: (A) -> B) -> (A) -> C
| |
Rust | fn(α1,α2,...,αn) -> ρ
|
fn compose<A, B, C>(f: fn(A) -> B, g: fn(B) -> C) -> fn(A) -> C
| |
(प्रथम श्रेणी के कार्यों के साथ,
पैरामीट्रिक बहुरूपता के बिना) With first-class functions, |
Go | func(α1,α2,...,αn) ρ
|
var compose func(func(int)int, func(int)int) func(int)int
|
C++, Objective-C, with blocks | ρ (^)(α1,α2,...,αn)
|
int (^compose(int (^f)(int), int (^g)(int)))(int);
| |
प्रथम श्रेणी के कार्यों के बिना,
पैरामीट्रिक बहुरूपता (Without first-class functions, |
C | ρ (*)(α1,α2,...,αn)
|
int (*compose(int (*f)(int), int (*g)(int)))(int);
|
C++11 | Not unique.
|
function<function<int(int)>(function<int(int)>, function<int(int)>)> compose;
|
इस प्रकार से उदाहरण के लिए C# के उदाहरण प्रकार के हस्ताक्षर को देखते समय, फंक्शन का प्रकार कंपोज़
वास्तव में Func<Func<A,B>,Func<B,C>,Func<A,C>>है
.
सी++11 के std::फंक्शन में टाइप इरेज़र के कारण, उच्च ऑर्डर फ़ंक्शन पैरामीटर के लिए टेम्पलेट और क्लोजर के लिए टाइप अनुमान (ऑटो) का उपयोग करना अधिक समान होता है।
सांकेतिक शब्दार्थ
प्रोग्रामिंग भाषाओं में फंक्शन प्रकार सभी समुच्चय -सैद्धांतिक फंक्शन के स्थान के अनुरूप नहीं है। डोमेन के रूप में अनगिनत प्रकार की प्राकृतिक संख्याओं और रेंज के रूप में बूलियन को देखते हुए, अनगिनत अनंत संख्या (2ℵ0 = c) होती है उनके मध्य समुच्चय -सैद्धांतिक कार्यों की सातत्य की प्रमुखता)। स्पष्ट रूप से फंक्शन का यह स्थान किसी भी प्रोग्रामिंग भाषा में परिभाषित किए जा सकने वाले फंक्शन की संख्या से उच्च है, क्योंकि केवल गिनती के कई प्रोग्राम उपस्तिथ हैं ( प्रोग्राम सीमित संख्या में प्रतीकों का सीमित अनुक्रम है) और समुच्चय -सैद्धांतिक फंक्शन में से हाल्टिंग समस्या को प्रभावी ढंग से हल करता है।
इस प्रकार से फंक्शन प्रकारों जैसे प्रोग्रामिंग भाषा अवधारणाओं को मॉडल करने के लिए अधिक उपयुक्त मॉडल (जिसे डोमेन सिद्धांत कहा जाता है) खोजने के साथ सांकेतिक शब्दार्थ का संबंध होता है। यह पता चला है कि अभिव्यक्ति को गणना योग्य कार्य के समुच्चय तक सीमित करना पर्याप्त नहीं होते है यदि प्रोग्रामिंग भाषा गैर-समाप्ति गणना लिखने की अनुमति देती है (यदि प्रोग्रामिंग भाषा ट्यूरिंग पूर्ण है तो यही स्थिति है)। अभिव्यक्ति तथाकथित सतत कार्यों तक ही सीमित होनी चाहिए या आंशिक रूप से क्रमित समुच्चय के मध्य निरंतर कार्य (स्कॉट टोपोलॉजी में निरंतरता के अनुरूप, वास्तविक विश्लेषणात्मक अर्थ में निरंतरता नहीं)। इसके अतिरिक्त , निरंतर फंक्शन के समुच्चय में समानांतर-या फंक्शन सम्मिलित होता है, जिसे सभी प्रोग्रामिंग भाषाओं में सही ढंग से परिभाषित नहीं किया जा सकता है।
यह भी देखें
- कार्टेशियन बंद श्रेणी
- करी
- घातांकीय वस्तु, श्रेणी-सैद्धांतिक समतुल्य
- प्रथम श्रेणी का फंक्शन
- फंक्शन स्पेस, समुच्चय -सैद्धांतिक समकक्ष
संदर्भ
- Pierce, Benjamin C. (2002). Types and Programming Languages. The MIT Press. pp. 99–100. ISBN 9780262162098.
- Mitchell, John C. Foundations for Programming Languages. The MIT Press.
- function type at the nLab
- Homotopy Type Theory: Univalent Foundations of Mathematics, The Univalent Foundations Program, Institute for Advanced Study. See section 1.2.