المسارات
/
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 بـ_التساوي البنيوي_، أي أن قيمتين تعودان إلى الحالة نفسها وتحملان البيانات نفسها (الاختيارية) متكافئتان.

وإن كان بإمكانك استخدام تعبيرات if/else للتعامل مع أنواع ADT، فإن الأسلوب الموصى به للتعامل معها هو مطابقة الأنماط باستخدام عبارة 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 يفتح الرابط في نافذة أو علامة تبويب جديدة