مسیر
/
Haskell
Haskell
/
برنامه‌ی درسی
/
نوع‌های داده‌ی جبری
نو

نوع‌های داده‌ی جبری در Haskell

1 تمرین

درباره‌ی نوع‌های داده‌ی جبری

یک نوع داده‌ی جبری (ADT) تعدادی ثابت از حالت‌های نامدار را نمایش می‌دهد. هر مقدار از یک ADT دقیقاً با یکی از حالت‌های نامدار متناظر است.

ADT با کلیدواژه‌ی data تعریف می‌شود و حالت‌های آن با کاراکتر خط عمودی (|) از هم جدا می‌شوند. اگر هیچ‌یک از حالت‌ها داده‌ی وابسته‌ای نداشته باشند، این ADT شبیه چیزی است که زبان‌های دیگر معمولاً شمارشی (یا enum) می‌نامند.

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 این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود