ट्रैक
/
Haskell
Haskell
/
सिलेबस
/
अल्जेब्रिक डेटा टाइप
अल

अल्जेब्रिक डेटा टाइप में Haskell

1 अभ्यास

अल्जेब्रिक डेटा टाइप के बारे में

एल्जेब्रिक डेटा टाइप (ADT) एक निश्चित संख्या में नामित केसों को दर्शाता है। ADT की हर वैल्यू इन नामित केसों में से ठीक एक के अनुरूप होती है।

ADT को data कीवर्ड से परिभाषित किया जाता है, और इसमें हर केस को पाइप (|) अक्षरों से अलग किया जाता है। अगर किसी भी केस से कोई डेटा जुड़ा न हो, तो यह ADT वैसा ही होता है जिसे दूसरी भाषाएँ आम तौर पर एन्यूमरेशन (या एनम) कहती हैं।

data Season
  = Spring
  | Summer
  | Autumn
  | Winter

ADT के हर केस के साथ वैकल्पिक रूप से डेटा जुड़ा हो सकता है, और अलग-अलग केसों में अलग-अलग टाइप का डेटा हो सकता है। जब किसी केस से डेटा जुड़ा होता है, तो एक कंस्ट्रक्टर ज़रूरी होता है।

data Number
  = NInt Int      --'NInt' is the constructor for an Int Number.
  | NFloat Float  --'NFloat' is the constructor for an Float Number.
  | Invalid       --'Invalid' does not have data associated to it.

किसी खास केस के लिए वैल्यू बनाने के लिए उसका नाम लिखा जाता है (जैसे, NInt 22)। चूँकि केसों के नाम कंस्ट्रक्टर फंक्शन ही होते हैं, इसलिए जुड़ा हुआ डेटा सामान्य फंक्शन आर्गुमेंट की तरह दिया जा सकता है।

ADT में स्ट्रक्चरल इक्वैलिटी होती है, यानी एक ही केस की और समान (वैकल्पिक) डेटा वाली दो वैल्यू बराबर होती हैं।

ADT के साथ काम करने के लिए if/else एक्सप्रेशन इस्तेमाल किए जा सकते हैं, लेकिन सबसे बेहतर तरीका case स्टेटमेंट की मदद से पैटर्न मैचिंग करना है:

add1 :: Number -> String
add1 number =
    case number of
      NInt    i -> show (i + 1)
      NFloat  f -> show (f + 1.0)
      Invalid   -> error "Invalid input"
GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।