यह शायद एक बहुत ही बुनियादी सवाल है, लेकिन, फिर भी, ऐसा लगता है कि यह SO पर शामिल नहीं है।हास्केल- (घोषणा का प्रकार) "ए" क्या है?
मैं हाल ही में हास्केल लिया और अब तक टाइप घोषणाओं शामिल ज्यादातर निम्नलिखित:
Int
Bool
Float
etc, etc
अब मैं सूचियों में हो रही है और मैं इस तरह के निम्नलिखित समारोह में के रूप में प्रकार घोषणाओं कि a
उपयोग करते हैं, देख रहा हूँ कि एक साहचर्य सूची के माध्यम से दोहराता:
contains :: Int -> [(Int,a)] -> [a]
contains x list = [values | (key,values)<-list, x==key]
कोई क्या इस a
है के रूप में एक विवरण प्रदान कर सकते हैं, और यह कैसे काम करता है? अवलोकन से यह हर प्रकार का प्रतिनिधित्व करता प्रतीत होता है। क्या इसका मतलब है कि मैं किसी भी प्रकार की किसी भी सूची को पैरामीटर के रूप में इनपुट कर सकता हूं?
बस महत्वपूर्ण रूप से, 'ए' विशेष नहीं है: * किसी भी * लोअर-केस पहचानकर्ता का अर्थ है। यह एक प्रकार * परिवर्तनीय * है, और एक ही हस्ताक्षर में मौजूद कई अलग-अलग प्रकार चर के लिए यह संभव है। उदाहरण के लिए, 'const :: a -> b -> a' दो तर्कों में से प्रत्येक में से प्रत्येक प्रकार लेता है, और उसी प्रकार के साथ एक मान देता है जो इसके पहले इनपुट के रूप में होता है। – amalloy
मैं देखता हूं, यह बहुत सामान्य है। तो, मुझे लगता है कि, ज्यादातर मामलों में, 'ए' आम तौर पर उन तत्वों का प्रतिनिधित्व करेगा जो मेरा फ़ंक्शन वास्तव में उपयोग नहीं करता है, या बहुत अधिक परिवर्तन नहीं करता है। – Bolboa
@ बोल्बो: हां, यह अन्य भाषाओं में "जेनेरिक" की अवधारणा से निकटता से संबंधित है। और हां, यदि प्रकार पूरी तरह से सामान्य है, तो आप मूल्य के लिए सीधे कुछ भी कर सकते हैं। हास्केल के पास इस प्रकार के बारे में अधिक जानकारी देने का एक तरीका है (उदाहरण के लिए, "समानता के लिए तुलना की जा सकती है", "मुद्रित किया जा सकता है", "किसी संख्या की तरह व्यवहार किया जा सकता है"), जो आपको मूल्यों पर अधिक प्रसंस्करण करने की अनुमति देता है ; यदि आप इसमें रूचि रखते हैं तो दस्तावेज़ों या ट्यूटोरियल में "कक्षाएं" देखें। – psmears