प्रकार (प्ररूप सिद्धांत): Difference between revisions
(Created page with "{{Short description|Type of types in a type system}} गणितीय तर्क और कंप्यूटर विज्ञान के क्षेत्र...") |
No edit summary |
||
Line 1: | Line 1: | ||
[[गणितीय तर्क]] और [[कंप्यूटर विज्ञान]] के क्षेत्र में जिसे [[ प्रकार सिद्धांत |प्ररूप सिद्धांत]] के रूप में जाना जाता है, एक '''प्रकार''' प्ररूप के निर्माता का प्रकार होता है या, प्रायः, उच्च-क्रम प्रकार के ऑपरेटर का प्रकार होता है। एक प्रकार की प्रणाली अनिवार्य रूप से सरल रूप से टाइप किया गया लैम्ब्डा गणना "एक स्तर ऊपर" है, जो एक साधारण प्रकार से संपन्न है, जिसे <math>*</math> दर्शाया जाता है और "प्रकार" कहा जाता है, जो कि किसी भी [[डेटा प्रकार]] का प्रकार है जिसे किसी भी प्रकार के [[पैरामीट्रिक बहुरूपता|पैरामीटरों]] की आवश्यकता नहीं होती है। | |||
[[गणितीय तर्क]] और [[कंप्यूटर विज्ञान]] के क्षेत्र में जिसे [[ प्रकार सिद्धांत ]] के रूप में जाना जाता है, एक प्रकार | |||
प्रकार को कभी-कभी भ्रामक रूप से "(डेटा) प्रकार के प्रकार" के रूप में वर्णित किया जाता है, लेकिन यह वास्तव में योग्यता विनिर्देशक के रूप में अधिक है। वाक्यात्मक रूप से, बहुरूपी प्रकारों को प्रकार का निर्माणकर्ता मानना स्वाभाविक है, इस प्रकार गैर-बहुरूपी प्रकारों को अशक्त प्रकार का निर्माता माना जाता है। लेकिन सभी [[अशक्त]] निर्माताओं, इस प्रकार सभी एकरूपी प्रकारों का एक ही, सरलतम प्रकार होता है अर्थात् <math>*</math>। | |||
चूँकि उच्च-क्रम प्रकार के ऑपरेटर [[प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं]] में असामान्य हैं, अधिकांश प्रोग्रामिंग अभ्यास में, डेटा प्रकारों और निर्माताओं के प्रकारों के बीच अंतर करने के लिए प्रकारों का उपयोग किया जाता है, जिनका उपयोग पैरामीट्रिक बहुरूपता को लागू करने के लिए किया जाता है। प्रकार, स्पष्ट रूप से या परोक्ष रूप से, उन भाषाओं में दिखाई देते हैं जिनके प्रकार प्रणाली कार्यक्रमात्मक रूप से सुलभ तरीके से पैरामीट्रिक बहुरूपता के लिए जिम्मेदार होते हैं, जैसे [[C++|सी ++]],<ref>{{Cite web|title=CS 115: Parametric Polymorphism: Template Functions|url=http://www2.cs.uregina.ca/~saxton/CS115/Notes/Templates/func.html|access-date=2020-08-06|website=www2.cs.uregina.ca}}</ref> [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] और [[स्काला (प्रोग्रामिंग भाषा)|स्काला]]।<ref name="higherkinds">{{Cite web |url=http://adriaanm.github.com/files/higher.pdf |title=उच्च प्रकार के जेनेरिक|access-date=2012-06-10 |archive-date=2012-06-10 |archive-url=https://web.archive.org/web/20120610022753/http://adriaanm.github.com/files/higher.pdf |url-status=dead }}</ref> | |||
== उदाहरण == | == उदाहरण == | ||
* <math>*</math>, उच्चारित प्रकार , सभी डेटा प्रकारों का एक प्रकार है जिसे अशक्त प्रकार के | * <math>*</math>, उच्चारित "प्रकार", सभी डेटा प्रकारों का एक प्रकार है जिसे अशक्त प्रकार के निर्माताओं के रूप में देखा जाता है, और इस संदर्भ में इसे उचित प्रकार भी कहा जाता है। इसमें सामान्यतः कार्यात्मक प्रोग्रामिंग भाषाओं में फलन प्रकार सम्मिलित होते हैं। | ||
* <math>* \rightarrow *</math> | *<math>* \rightarrow *</math> [[एकात्मक कार्य|एकल]] प्रकार का निर्माता है, जैसे एक [[सूची प्रकार]] के निर्माता का। | ||
* <math>* \rightarrow * \rightarrow *</math> एक | *<math>* \rightarrow * \rightarrow *</math> एक प्रकार का बाइनरी प्रकार का निर्माता है ([[करी|विच्छेदन]] के माध्यम से), जैसे एक [[जोड़ी प्रकार]] के निर्माता का, और [[फ़ंक्शन प्रकार|फलन प्रकार]] के निर्माता (इसके अनुप्रयोग के परिणाम से भ्रमित न हों, जो स्वयं फलन प्रकार है, इस प्रकार <math>*</math>) का भी। | ||
* <math>(* \rightarrow *) \rightarrow *</math> | *<math>(* \rightarrow *) \rightarrow *</math> एकल प्रकार निर्माता से उचित प्रकार तक का उच्च-क्रम प्रकार का ऑपरेटर है।<ref> Pierce (2002), chapter 32</ref> | ||
== हास्केल में प्रकार == | == हास्केल में प्रकार == | ||
(नोट | (''नोट''- हास्केल दस्तावेज़ीकरण फलन प्रकार और प्रकार दोनों के लिए एक ही तीर का उपयोग करता है।) | ||
हास्केल की प्रकार प्रणाली | हास्केल 98 की प्रकार प्रणाली<ref name="haskell98">[http://www.haskell.org/onlinereport/decls.html#sect4.1.1 Kinds - The Haskell 98 Report]</ref> में बिल्कुल दो प्रकार सम्मिलित हैं- | ||
*<math>*</math>, उच्चारित प्रकार सभी डेटा प्रकारों का प्रकार है। | *<math>*</math>, उच्चारित "प्रकार" सभी डेटा प्रकारों का प्रकार है। | ||
*<math>k_1 \rightarrow k_2</math> एक | *<math>k_1 \rightarrow k_2</math> एक प्रकार का एकल प्रकार का निर्माता है, जो प्रकार का <math>k_1</math> लेता है और एक प्रकार का प्रकार <math>k_2</math> उत्पन्न करता है। | ||
निवासित प्रकार (जैसा कि उचित प्रकार को हास्केल में कहा जाता है) एक ऐसा प्रकार है जिसमें मान होते हैं। उदाहरण के लिए, चित्र को संवलित बनाने वाले [[प्रकार वर्ग|प्रकार वर्गों]] को अनदेखा करते हुए, <code>4</code> प्रकार <code>Int</code> का मान है, जबकि <code>[1, 2, 3]</code> प्रकार <code>[Int]</code> (Ints की सूची) का मान है। इसलिए, <code>Int</code> और <code>[Int]</code> में प्रकार <math>*</math> होता है, लेकिन किसी भी फलन प्रकार में भी ऐसा ही होता है, उदाहरण के लिए <code>Int -> Bool</code> या यहां तक कि <code>Int -> Int -> Bool</code>। | |||
एक | एक प्रकार का निर्माता एक या अधिक प्रकार के तर्क लेता है, और पर्याप्त तर्क प्रदान किए जाने पर डेटा प्रकार उत्पन्न करता है, अर्थात यह विच्छेदन के लिए आंशिक एप्लिकेशन का समर्थन करता है।<ref name="haskell-2010">{{cite web|title=Chapter 4 Declarations and Binding|url=http://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-65017x3|work=Haskell 2010 Language Report|access-date=23 July 2012}}</ref><ref>{{cite web|last=Miran|first=Lipovača|title=महान भलाई के लिए हास्केल सीखें!|url=http://learnyouahaskell.com/making-our-own-types-and-typeclasses|work=Making Our Own Types and Typeclasses|access-date=23 July 2012}}</ref> इस प्रकार हास्केल पैरामीट्रिक प्रकार प्राप्त करता है। उदाहरण के लिए, प्रकार <code>[]</code> (सूची) एक प्रकार का निर्माता है - यह सूची के तत्वों के प्रकार को निर्दिष्ट करने के लिए एकल तर्क लेता है। इसलिए, <code>[Int]</code> (Ints की सूची), <code>[Float]</code> (फ्लोट्स की सूची) और यहां तक कि <code>[[इंट|[[Int]<nowiki>]</nowiki>]]</code> (Ints की सूचियों की सूची) <code>[]</code> प्रकार के निर्माता के वैध एप्लिकेशन हैं। इसलिए, <code>[]</code> प्रकार का <math>* \rightarrow *</math> है। क्योंकि <code>Int</code> में प्रकार <math>*</math> है, इसलिए इसमें <code>[]</code> लगाने से परिणाम <math>*</math> प्रकार में <code>[Int]</code> होता है। 2-[[ टपल |टपल]] निर्माता <code>(,)</code> में प्रकार <math>* \rightarrow * \rightarrow *</math> होता है, 3-टपल निर्माता <code>(,,)</code> में प्रकार <math>* \rightarrow * \rightarrow * \rightarrow *</math> होता है और इसी तरह। | ||
=== प्रकार अनुमान === | |||
मानक हास्केल [[बहुरूपी प्रकार|बहुरूपी प्रकारों]] की अनुमति नहीं देता है। यह प्रकारों पर पैरामीट्रिक बहुरूपता के विपरीत है, जो हास्केल में समर्थित है। उदाहरण के लिए, निम्नलिखित उदाहरण में- | |||
मानक हास्केल [[बहुरूपी प्रकार]] | |||
<syntaxhighlight lang=haskell> | <syntaxhighlight lang=haskell> | ||
data Tree z = Leaf | Fork (Tree z) (Tree z) | data Tree z = Leaf | Fork (Tree z) (Tree z) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<code>z</code> का प्रकार कुछ भी हो सकता है, जिसमें <math>*</math>, लेकिन <math>* \rightarrow *</math> आदि भी सम्मिलित हैं। डिफ़ॉल्ट रूप से हास्केल हमेशा <math>*</math> प्रकार का अनुमान लगाएगा, जब तक कि प्रकार स्पष्ट रूप से अन्यथा इंगित न करे (नीचे देखें)। इसलिए प्रकार जांचकर्ता <code>Tree</code> के निम्नलिखित उपयोग को अस्वीकार कर देगा- | |||
<syntaxhighlight lang=haskell> | <syntaxhighlight lang=haskell> | ||
type FunnyTree = Tree [] -- invalid | type FunnyTree = Tree [] -- invalid | ||
</syntaxhighlight> | </syntaxhighlight> | ||
क्योंकि | क्योंकि <code>[]</code>, <math>* \rightarrow *</math> का प्रकार <code>z</code> के लिए अपेक्षित प्रकार से मेल नहीं खाता है, जो सदैव <math>*</math> होता है। | ||
हालाँकि उच्च-क्रम प्रकार के ऑपरेटरों को अनुमति है। उदाहरण के लिए | हालाँकि उच्च-क्रम प्रकार के ऑपरेटरों को अनुमति है। उदाहरण के लिए- | ||
<syntaxhighlight lang=haskell> | <syntaxhighlight lang=haskell> | ||
data App unt z = Z (unt z) | data App unt z = Z (unt z) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
प्रकार <math>(* \rightarrow *) \rightarrow * \rightarrow *</math> है, अर्थात <code>unt</code> से एकल डेटा निर्माता होने की आशा है, जो इसके तर्क पर लागू होता है, जो प्रकार होना चाहिए, और एक अन्य प्रकार वापस करता है। | |||
[[ग्लासगो हास्केल कंपाइलर]] का | [[ग्लासगो हास्केल कंपाइलर|जीएचसी (GHC)]] का एक्सटेंशन <code>PolyKinds</code> है, जो <code>KindSignatures</code> के साथ मिलकर बहुरूपी प्रकारों की अनुमति देता है। उदाहरण के लिए- | ||
<syntaxhighlight lang=haskell> | <syntaxhighlight lang=haskell> | ||
data Tree (z :: k) = Leaf | Fork (Tree z) (Tree z) | data Tree (z :: k) = Leaf | Fork (Tree z) (Tree z) | ||
type FunnyTree = Tree [] -- OK | type FunnyTree = Tree [] -- OK | ||
</syntaxhighlight> | </syntaxhighlight> | ||
जीएचसी 8.0.1 के बाद से, प्रकार और प्रकारों का विलय हो गया है।<ref>{{Cite web|url=https://downloads.haskell.org/~ghc/8.0.1/docs/html/users_guide/glasgow_exts.html#ghc-flag--XTypeInType|title=9.1. Language options — Glasgow Haskell Compiler Users Guide}}</ref> | |||
== यह भी देखें == | == यह भी देखें == | ||
* [[सिस्टम एफ-ओमेगा]] | * [[सिस्टम एफ-ओमेगा|प्रणाली एफ-ओमेगा]] | ||
* [[शुद्ध प्रकार की प्रणाली]] | * [[शुद्ध प्रकार की प्रणाली]] | ||
Line 70: | Line 59: | ||
{{DEFAULTSORT:Kind (Type Theory)}}[[Category: प्रकार सिद्धांत]] [[Category: डेटा के प्रकार]] | {{DEFAULTSORT:Kind (Type Theory)}}[[Category: प्रकार सिद्धांत]] [[Category: डेटा के प्रकार]] | ||
[[Category: Machine Translated Page]] | [[Category: Machine Translated Page]] | ||
[[Category:Created On 08/07/2023]] | [[Category:Created On 08/07/2023]] |
Revision as of 15:16, 17 July 2023
गणितीय तर्क और कंप्यूटर विज्ञान के क्षेत्र में जिसे प्ररूप सिद्धांत के रूप में जाना जाता है, एक प्रकार प्ररूप के निर्माता का प्रकार होता है या, प्रायः, उच्च-क्रम प्रकार के ऑपरेटर का प्रकार होता है। एक प्रकार की प्रणाली अनिवार्य रूप से सरल रूप से टाइप किया गया लैम्ब्डा गणना "एक स्तर ऊपर" है, जो एक साधारण प्रकार से संपन्न है, जिसे दर्शाया जाता है और "प्रकार" कहा जाता है, जो कि किसी भी डेटा प्रकार का प्रकार है जिसे किसी भी प्रकार के पैरामीटरों की आवश्यकता नहीं होती है।
प्रकार को कभी-कभी भ्रामक रूप से "(डेटा) प्रकार के प्रकार" के रूप में वर्णित किया जाता है, लेकिन यह वास्तव में योग्यता विनिर्देशक के रूप में अधिक है। वाक्यात्मक रूप से, बहुरूपी प्रकारों को प्रकार का निर्माणकर्ता मानना स्वाभाविक है, इस प्रकार गैर-बहुरूपी प्रकारों को अशक्त प्रकार का निर्माता माना जाता है। लेकिन सभी अशक्त निर्माताओं, इस प्रकार सभी एकरूपी प्रकारों का एक ही, सरलतम प्रकार होता है अर्थात् ।
चूँकि उच्च-क्रम प्रकार के ऑपरेटर प्रोग्रामिंग भाषाओं में असामान्य हैं, अधिकांश प्रोग्रामिंग अभ्यास में, डेटा प्रकारों और निर्माताओं के प्रकारों के बीच अंतर करने के लिए प्रकारों का उपयोग किया जाता है, जिनका उपयोग पैरामीट्रिक बहुरूपता को लागू करने के लिए किया जाता है। प्रकार, स्पष्ट रूप से या परोक्ष रूप से, उन भाषाओं में दिखाई देते हैं जिनके प्रकार प्रणाली कार्यक्रमात्मक रूप से सुलभ तरीके से पैरामीट्रिक बहुरूपता के लिए जिम्मेदार होते हैं, जैसे सी ++,[1] हास्केल और स्काला।[2]
उदाहरण
- , उच्चारित "प्रकार", सभी डेटा प्रकारों का एक प्रकार है जिसे अशक्त प्रकार के निर्माताओं के रूप में देखा जाता है, और इस संदर्भ में इसे उचित प्रकार भी कहा जाता है। इसमें सामान्यतः कार्यात्मक प्रोग्रामिंग भाषाओं में फलन प्रकार सम्मिलित होते हैं।
- एकल प्रकार का निर्माता है, जैसे एक सूची प्रकार के निर्माता का।
- एक प्रकार का बाइनरी प्रकार का निर्माता है (विच्छेदन के माध्यम से), जैसे एक जोड़ी प्रकार के निर्माता का, और फलन प्रकार के निर्माता (इसके अनुप्रयोग के परिणाम से भ्रमित न हों, जो स्वयं फलन प्रकार है, इस प्रकार ) का भी।
- एकल प्रकार निर्माता से उचित प्रकार तक का उच्च-क्रम प्रकार का ऑपरेटर है।[3]
हास्केल में प्रकार
(नोट- हास्केल दस्तावेज़ीकरण फलन प्रकार और प्रकार दोनों के लिए एक ही तीर का उपयोग करता है।)
हास्केल 98 की प्रकार प्रणाली[4] में बिल्कुल दो प्रकार सम्मिलित हैं-
- , उच्चारित "प्रकार" सभी डेटा प्रकारों का प्रकार है।
- एक प्रकार का एकल प्रकार का निर्माता है, जो प्रकार का लेता है और एक प्रकार का प्रकार उत्पन्न करता है।
निवासित प्रकार (जैसा कि उचित प्रकार को हास्केल में कहा जाता है) एक ऐसा प्रकार है जिसमें मान होते हैं। उदाहरण के लिए, चित्र को संवलित बनाने वाले प्रकार वर्गों को अनदेखा करते हुए, 4
प्रकार Int
का मान है, जबकि [1, 2, 3]
प्रकार [Int]
(Ints की सूची) का मान है। इसलिए, Int
और [Int]
में प्रकार होता है, लेकिन किसी भी फलन प्रकार में भी ऐसा ही होता है, उदाहरण के लिए Int -> Bool
या यहां तक कि Int -> Int -> Bool
।
एक प्रकार का निर्माता एक या अधिक प्रकार के तर्क लेता है, और पर्याप्त तर्क प्रदान किए जाने पर डेटा प्रकार उत्पन्न करता है, अर्थात यह विच्छेदन के लिए आंशिक एप्लिकेशन का समर्थन करता है।[5][6] इस प्रकार हास्केल पैरामीट्रिक प्रकार प्राप्त करता है। उदाहरण के लिए, प्रकार []
(सूची) एक प्रकार का निर्माता है - यह सूची के तत्वों के प्रकार को निर्दिष्ट करने के लिए एकल तर्क लेता है। इसलिए, [Int]
(Ints की सूची), [Float]
(फ्लोट्स की सूची) और यहां तक कि [[Int]]
(Ints की सूचियों की सूची) []
प्रकार के निर्माता के वैध एप्लिकेशन हैं। इसलिए, []
प्रकार का है। क्योंकि Int
में प्रकार है, इसलिए इसमें []
लगाने से परिणाम प्रकार में [Int]
होता है। 2-टपल निर्माता (,)
में प्रकार होता है, 3-टपल निर्माता (,,)
में प्रकार होता है और इसी तरह।
प्रकार अनुमान
मानक हास्केल बहुरूपी प्रकारों की अनुमति नहीं देता है। यह प्रकारों पर पैरामीट्रिक बहुरूपता के विपरीत है, जो हास्केल में समर्थित है। उदाहरण के लिए, निम्नलिखित उदाहरण में-
data Tree z = Leaf | Fork (Tree z) (Tree z)
z
का प्रकार कुछ भी हो सकता है, जिसमें , लेकिन आदि भी सम्मिलित हैं। डिफ़ॉल्ट रूप से हास्केल हमेशा प्रकार का अनुमान लगाएगा, जब तक कि प्रकार स्पष्ट रूप से अन्यथा इंगित न करे (नीचे देखें)। इसलिए प्रकार जांचकर्ता Tree
के निम्नलिखित उपयोग को अस्वीकार कर देगा-
type FunnyTree = Tree [] -- invalid
क्योंकि []
, का प्रकार z
के लिए अपेक्षित प्रकार से मेल नहीं खाता है, जो सदैव होता है।
हालाँकि उच्च-क्रम प्रकार के ऑपरेटरों को अनुमति है। उदाहरण के लिए-
data App unt z = Z (unt z)
प्रकार है, अर्थात unt
से एकल डेटा निर्माता होने की आशा है, जो इसके तर्क पर लागू होता है, जो प्रकार होना चाहिए, और एक अन्य प्रकार वापस करता है।
जीएचसी (GHC) का एक्सटेंशन PolyKinds
है, जो KindSignatures
के साथ मिलकर बहुरूपी प्रकारों की अनुमति देता है। उदाहरण के लिए-
data Tree (z :: k) = Leaf | Fork (Tree z) (Tree z)
type FunnyTree = Tree [] -- OK
जीएचसी 8.0.1 के बाद से, प्रकार और प्रकारों का विलय हो गया है।[7]
यह भी देखें
संदर्भ
- Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. ISBN 0-262-16209-1., chapter 29, "Type Operators and Kinding"
- ↑ "CS 115: Parametric Polymorphism: Template Functions". www2.cs.uregina.ca. Retrieved 2020-08-06.
- ↑ "उच्च प्रकार के जेनेरिक" (PDF). Archived from the original (PDF) on 2012-06-10. Retrieved 2012-06-10.
- ↑ Pierce (2002), chapter 32
- ↑ Kinds - The Haskell 98 Report
- ↑ "Chapter 4 Declarations and Binding". Haskell 2010 Language Report. Retrieved 23 July 2012.
- ↑ Miran, Lipovača. "महान भलाई के लिए हास्केल सीखें!". Making Our Own Types and Typeclasses. Retrieved 23 July 2012.
- ↑ "9.1. Language options — Glasgow Haskell Compiler Users Guide".