Ce sa retin despre declaratia de tipuri utilizator cu data ?

From HaskellWiki


. O prima prezentare[edit]

Retineti ca se folosesc la a defini tipuri de structuri de date utilizator. Si bineinteles invatati sintaxa lor.

data NumeTip v a r ... = NumeDate t i p u r i ...

Numelui din stanga i se zice constructor de tip. Numelui din dreapta i se zice constructor de date. (pot fi mai multi)

Cum sa ne imaginam o structura de date utilizator ?

V-o puteti imagina fiind similara unei cutii compartimentate folosita pentru globurile din pomul de craciun. Are compartimente (de exemplu mari si mici - imaginati-va ca sunt notate cu minuscule distincte) in care se vor putea pune anumite feluri de podoabe. Bineinteles in compartimentele notate cu 'a' vom pune doar lucruri (pardon - date) de un anume tip.

Cutia are o eticheta: numele tipului din stanga semnului egal. Eticheta poate fi parametrizata asa ca putem avea ceva numit:

CutieMareCu Globuri -- Globuri este tipul dat ca parametru CutieMicaCu Globuri sau CutieMareCu Int

daca am declarat

data CutieMare x = .....

si

data CutieMica y = .....

Observati ca seamana cu template-urile din C++. Acest lucru nu e intamplator. In C++ template-urile serveau la realizarea de clase si functii cu parametri de tip polimorfici. La fel si aici, in Haskell, tipurile declarate cu data, daca contin variabile de tip sunt veritabile sabloane (template-uri) polimorfice de tipuri.

Cititi si Capitolul 3 din cartea "Introducere in Haskell 98 prin exemple" din pagina cu capitole de carte sau capitolul din cartea tiparita.. Am scris acest capitolul acesta in martie 2005, asa cum se vede si din imaginile aflate in capitol. - Descarcati capitolul despre declaratii utilizator!


. Structurile data cu functii incluse in ele[edit]

Declaratiile data ale tipurilor de date utilizator care contin functii sunt un instrumente de lucru foarte puternice. Sunt un fel de record-uri cu membri functie care pot avea campuri recursiv definite = alte recorduri ca ele. Vedeti un exemplu de cod la pagina : Gestionarea domeniilor unor functii.


Aceasta pagina mai poate fi imbunatatita.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.