Διαδρομές
/
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 Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα