Poate aceeasi functie sa aiba doua tipuri in doua programe ?

From HaskellWiki
Revision as of 22:23, 24 January 2008 by Ha$kell (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Haskell - Un limbaj functional pur

Contactul cu un limbaj de programare nou naste intrebari, mai ales cand este vorba de un limbaj atat de inovator. Cea mai buna cale de a va familiariza cu Haskell este sa conversati cu un interpretor, cum este Hugs. Sau sa folositi GHC si sa conversati cu GHCi (GHC Interactiv). Cautati explicatiile care v-ar ajuta in lista de mai jos. Link-urile rosii,daca exista, sunt ca de obicei spre viitoare pagini in curs de constructie.

. Explicatia in termeni de Haskell

In sistemul de tipuri al Haskell-ului tipul unei entitati este
cel mai mic tip care i se poate atribui ca urmare a rezolvarii
intregului sistem de ecuatii din intregul program. Ecuatii in tipuri.

Ce intelegem prin cel mai mic tip ? Cel mai mic tip e inteles in sensul:
('c',1) poate fi si un (a,Int) si un (Char,x) si un (Char,Int). Dar este
cel mai mic ultimul.

Intre tipuri se stabileste deci o relatie de ordine, bazata pe generalitate
sau - echivalent - pe posibilitatea de a obtine un tip din altul prin
particularizare.

Cand rezolvi (in tipuri!) o singura ecuatie cum este y f = f (y f)
s-ar putea sa obtii ca cea mai mica solutie (a sistemului format de o ecuatie)
va fi:

y :: (a->a)-> a

Daca insa acea formula y f = f (y f) apare in program impreuna
cu alte ecuatii, poti obtine dupa rezolvarea sistemului particularizari
(mai specifice daca vrei) ale rezultatului anterior.
De exemplu cu ajutorul altor ecuatii din program sistemul de inferente
de tipuri poate decide ca acel a de mai sus poate fi particularizat
(deci
obtine un tip mai mic ca ordine a tipurilor) devenind b-> c .

Deci y::((b->c)-> (b->c)) -> (b->c) in acest caz.

Dintre cele doua, y :: (a->a)-> a si y::((b->c)-> (b->c)) -> (b->c)

sistemul Haskell o va alege pe cea mai mica, pe cea mai particulara,pe
a doua ! Totul depinde deci (in asemenea cazuri de ambiguitate aparenta)
de ce alte ecuatii mai exista in program.


. Explicatia prin analogie

Un fenomen similar (oarecum) se intampla si in matematica valorilor intregi.

Fie (in)ecuatia: x >= 0 Evident ca are un cel mai mic x ce-o satisface.

Sa adaugam acum inca o restrictie:
x mod 2 = 1

Obtin sistemul:
x mod 2= 1
x >= 0

Evident ca are acum o alta 'cea mai mica solutie'.

Asa ceva se intampla si cu tipurile in Haskell, cand folosim ecuatii recursive,
fara indicatii exprese de tip.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.