क्या कोई भी मुझे एल्गोरिदम सॉर्ट करने के संबंध में यह समझा सकता है?एक पैरामीट्रिकली पॉलिमॉर्फिक फ़ंक्शन क्या है?
उत्तर
मुझे सबसे सरल चीज़ की कोशिश करने दें।
मान लीजिए आप पूर्णांकों की एक जोड़ी है:
foo :: (Int, Int)
foo = (2,5)
और आप एक समारोह है कि कि जोड़ी पर पूर्णांकों की स्थिति स्वैप चाहते हैं। यह againt लागू करने के लिए
swapInt :: (Int, Int) -> (Int, Int)
swapInt (x,y) = (y,x)
लेकिन अब अगर आप Double
रों के लिए एक समान कार्य की जरूरत है, आप होगा:: आप ऐसा कर सकता है
swapDouble :: (Double, Double) -> (Double, Double)
swapDouble (x,y) = (y,x)
आप चीजों के एक ध्यान देने योग्य कुछ है: (1) swapDouble
और swapInt
के कोड उनके प्रकार के हस्ताक्षर को छोड़कर समान हैं, (2) कोड में कहीं भी आप उस संदर्भ में कुछ भी संदर्भित नहीं करते हैं जो x
और y
के प्रकारों पर निर्भर करेगा। यह कोड मान्य है जो भी उनके प्रकार हैं। तो कोड को सिर्फ एक बार लिखने का एक तरीका होना चाहिए और संकलक को प्रत्येक प्रकार की आवश्यकता के लिए स्वचालित रूप से कोड को विशेषज्ञ बनाना चाहिए। ऐसा करने का तरीका पैरामीट्रिकल पॉलीमोर्फिज्म है। इस विशेष मामले के लिए, आप लिख सकते हैं:
swap :: (a,b) -> (b,a)
swap (x,y) = (y,x)
इसका क्या अर्थ है? आप कंपाइलर को बता रहे हैं: एक फ़ंक्शन स्वैप है, जो एक जोड़ी (x, y) लेता है जहां x टाइप प्रकार ए और वाई प्रकार बी है, और जोड़ी (y, x) को वापस कर देता है। ए और बी किसी भी प्रकार का हो सकता है, इस प्रकार इस फ़ंक्शन को पॉलीमोर्फिक फ़ंक्शन कहा जाता है। जब आप किसी विशिष्ट जोड़ी पर swap
लागू करते हैं, तो कंपाइलर इस जोड़ी के प्रकार की जांच करेगा और स्वचालित रूप से इस फ़ंक्शन के एक संस्करण को तुरंत चालू करेगा जो आपके टुपल के लिए पर्याप्त है।
उदाहरण के लिए:
swap ('a', 1) = (1,'a') -- in this case swap :: (Char, Int) -> (Int, Char)
swap (0 , 5) = (5, 0) -- in this case swap :: (Int , Int) -> (Int, Int)
का नाम समझते हैं: बहुरूपी किसी भी समारोह या डेटा संरचना है कि कई अलग अलग प्रकार के साथ काम करता है। पैरामीट्रिक कारण पॉलिमॉर्फिज्म को लागू करने का तरीका है फंक्शन या डेटा स्ट्रक्चर के प्रकार में "टाइप पैरामीटर" होना। जब आप (a,b)
लिखते हैं, a
और b
टाइप पैरामीटर हैं।
कई डेटा संरचनाओं को तब भी लागू किया जा सकता है जब सूची में शामिल है: सूचियां, सरणी, मानचित्र, टुपल्स, ... उनमें से सभी को पैरामीट्रिकली पॉलिमॉर्फिक कार्यान्वयन हो सकता है। और उनके द्वारा संचालित कार्यों: क्रमबद्ध, मानचित्र, गुना, ... विशिष्ट प्रकारों को संदर्भित किए बिना लागू किया जा सकता है, लेकिन पैरामीटर टाइप करने के लिए जो संकलक द्वारा स्वचालित रूप से विशेषीकृत किया जाएगा।
अन्य प्रकार के बहुरूपता मौजूद हैं, और उदाहरण के लिए, हास्केल भी विज्ञापन पॉलिमॉर्फिज्म को लागू करता है।
पैरामैट्रिक पॉलिमॉर्फिज्म सामान्य रूप से एक फ़ंक्शन या डेटा प्रकार को लिखे जाने की अनुमति देता है, ताकि यह उनके प्रकार के आधार पर समान रूप से मूल्यों को संभाल सके। पैरामैट्रिक पॉलिमॉर्फिज्म एक भाषा को अधिक अभिव्यक्तिपूर्ण बनाने का एक तरीका है, जबकि अभी भी पूर्ण स्थैतिक प्रकार-सुरक्षा को बनाए रखना है।
- से: http://en.wikipedia.org/wiki/Polymorphism_(computer_science)।
खोजों के संबंध में, मुझे लगता है कि सटीक संदर्भ पर अधिक निर्भर करता है - मैं वहां मदद नहीं कर सकता।
शायद मामला। सरल मामला 'id :: a -> a' है जो किसी भी प्रकार का मान हो सकता है, और उसी मान को लौटाता है (जो कि अभी भी वही प्रकार है)। बहुरूपता के बिना आपको सभी प्रकारों के लिए 'idInt :: Int -> Int'' idString :: स्ट्रिंग -> स्ट्रिंग' आदि घोषित करना होगा –
सहमत हैं। ध्यान देने योग्य भी है, क्योंकि इसे भूलना आसान है। "पैरामीटर" का अर्थ केवल यह है कि फ़ंक्शन क्या करता है उसके दिए गए मानकों पर आधारित होता है। क्षमा करें अगर यह स्पष्ट है। – Adam
एक ऐसा फ़ंक्शन जो तर्क प्रकारों के लिए अज्ञेयवादी है, यह इसके साथ काम करता है।
linear_search f n [] = Nothing
linear_search f n (x:xs)
| f n x = Just x
| otherwise = linear_search f n xs
मेरा हास्केल जंगली है, इसलिए अगर कोई टिप्पणी में गलतियों को सही कर सकता है तो इसकी सराहना की जाएगी।
यहां विचार यह है कि linear_search
किसी भी प्रकार की सूची में एक रैखिक खोज को पूर्ववत कर सकता है; यह वही कार्य करता है जो फ़र्मेट्रिकली (फ़ंक्शन पैरामीटर का अर्थ है) पॉलिमॉर्फिक (क्योंकि वे कई प्रकार के हो सकते हैं)।
# preforming on integers
linear_search (==) 5 [1,2,3,4,5]
# returns Just 5
# preforming on strings
linear_search (elem) 'e' ["doctor", "apron", "horse", "sky"]
# returns Just "horse"
जब इस समारोह के प्रकार के बारे में बात कर, यह (a -> b -> Bool) -> a -> [b] -> Maybe b
के रूप में कहा गया है। महत्वपूर्ण बात यह है कि अक्षरों प्रकार चर इंगित करते हैं, जिसका अर्थ है कि उनका प्रकार कुछ भी हो सकता है - फिर संपत्ति जो पैरामीट्रिकली पॉलिमॉर्फिक बनाती है।
सबसे पहले, '(ए -> बी -> बूल) -> ए -> [बी] -> शायद बी' में एक गायब 'बी' है। दूसरा, यह 'बस एन' के बजाय 'बस x' होना चाहिए। – Rotsor
- 1. एक पॉलिमॉर्फिक सी ++ वर्ग
- 2. क्या जर्सी अनुरोध एक पॉलिमॉर्फिक इकाई लौटा सकता है?
- 3. क्या कोई पॉलिमॉर्फिक 'toString` फ़ंक्शन है जो उद्धरण नहीं जोड़ता है?
- 4. पॉलिमॉर्फिक एसोसिएशन एक ही मॉडल
- 5. एक पॉलिमॉर्फिक ऑब्जेक्ट का आकार पता करें
- 6. पॉलिमॉर्फिक पहचान
- 7. पॉलिमॉर्फिक एसोसिएशन के बजाय क्या उपयोग करें?
- 8. क्यों और पॉलिमॉर्फिक जेनेरिक प्रकारों का क्या
- 9. सरल पॉलिमॉर्फिक इंजन
- 10. एक पॉलिमॉर्फिक प्रकार हस्ताक्षर प्रदर्शन को कम क्यों करता है?
- 11. रिवर्स पॉलिमॉर्फिक एसोसिएशन
- 12. पॉलिमॉर्फिक एमवीसी व्यू
- 13. रेल पेपरक्लिप पॉलिमॉर्फिक शैलियों
- 14. जावा में पॉलिमॉर्फिक प्रति
- 15. सी ++: पॉलिमॉर्फिक क्लास टेम्पलेट
- 16. पॉलिमॉर्फिक प्रकार और IXmlSerializable
- 17. बूस्ट पायथन: पॉलिमॉर्फिक कंटेनर?
- 18. रूबी: घोषणात्मक_आधिकरण पॉलिमॉर्फिक संघ
- 19. वेरिएंट या पॉलिमॉर्फिक वेरिएंट?
- 20. क्या वीबीस्क्रिप्ट में एक substring() फ़ंक्शन है?
- 21. ट्रैम्पोलिन फ़ंक्शन क्या है?
- 22. लैम्ब्डा (फ़ंक्शन) क्या है?
- 23. "पृष्ठ फ़ंक्शन" क्या है?
- 24. पॉलिमॉर्फिक रिश्तों और काउंटर कैश
- 25. क्या एक वीबीस्क्रिप्ट फ़ंक्शन एक शब्दकोश वापस कर सकता है?
- 26. क्या ऑब्जेक्ट समतुल्य के लिए पॉलिमॉर्फिक प्रकार की तुलना करने के लिए सी ++ में एक मूर्खतापूर्ण दृष्टिकोण है?
- 27. "Backbone.Model.extend() एक फ़ंक्शन नहीं है", मैंने क्या गलत किया है?
- 28. सी ++: क्या पॉलिमॉर्फिक कॉपी कन्स्ट्रक्टर्स काम कर सकते हैं?
- 29. क्या करता है! फ़ंक्शन ($) {$ (फ़ंक्शन() {})} (window.jQuery) क्या करते हैं?
- 30. यह फ़ंक्शन क्या करता है?
"खोज" से आपका क्या मतलब है? –
पूर्णांक – Lunar
के क्विकॉर्ट के संबंध में, संक्षेप में, यह एक [प्राकृतिक परिवर्तन] (http://en.wikipedia.org/wiki/Natural_transformation) है। लेकिन ऐसा कहकर यह केवल मामलों को जटिल बनाता है। –