Kurzusok
/
Haskell
Haskell
/
Tanterv
/
Algebrai adattípusok
Al

Algebrai adattípusok ebben a kurzusban: Haskell

1 feladat

A(z) Algebrai adattípusok fogalomról

Az algebrai adattípus (ADT) rögzített számú nevesített esetet ír le. Az ADT minden értéke pontosan egy nevesített esetnek felel meg.

Az ADT-t a data kulcsszóval definiáljuk, az eseteket függőleges vonal (|) karakterekkel választjuk el. Ha egyik esethez sem tartozik adat, az ADT hasonló ahhoz, amit más nyelvek általában felsorolásnak (vagy enum) neveznek.

data Season
  = Spring
  | Summer
  | Autumn
  | Winter

Az ADT minden esetéhez opcionálisan tartozhat adat, és a különböző esetekhez különböző típusú adatok tartozhatnak. Ha az esethez adat tartozik, konstruktorra van szükség.

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.

Egy adott esethez tartozó értéket úgy hozhatunk létre, hogy a nevére hivatkozunk (pl. NInt 22). Mivel az esetnevek valójában konstruktorfüggvények, a hozzájuk tartozó adatot sima függvényargumentumként adhatjuk át.

Az ADT-k strukturális egyenlőséggel rendelkeznek, ami azt jelenti, hogy két érték, amely ugyanahhoz az esethez tartozik, és ugyanazokkal az (opcionális) adatokkal rendelkezik, egyenértékű.

Bár használhatunk if/else kifejezéseket az ADT-k kezelésére, a velük való munka ajánlott módja a mintaillesztés a case utasítással:

add1 :: Number -> String
add1 number =
    case number of
      NInt    i -> show (i + 1)
      NFloat  f -> show (f + 1.0)
      Invalid   -> error "Invalid input"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg