Difference between revisions of "Poate aceeasi functie sa aiba doua tipuri in doua programe ?"
m |
m |
||
Line 1: | Line 1: | ||
+ | [[Image:Haskelllogo-small-flag-RO-8.jpg|center|Haskell - Un limbaj functional pur]] |
||
+ | |||
+ | <center> |
||
+ | 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. |
||
+ | |||
+ | </center> |
||
+ | __NOTOC__ |
||
+ | <center> |
||
+ | {| border=0 cellspacing=5 cellpadding=15 |
||
+ | | valign=top bgcolor=#F0F0F0 style="text-align:left" | |
||
[[Category:Ro]] |
[[Category:Ro]] |
||
+ | |||
==. Explicatia in termeni de Haskell == |
==. Explicatia in termeni de Haskell == |
||
Line 6: | Line 17: | ||
'''intregului''' sistem de ecuatii din '''intregul program'''. Ecuatii in tipuri. |
'''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: |
+ | Ce intelegem prin cel mai mic tip ? Cel mai mic tip e inteles in sensul:<br> |
− | ('c',1) poate fi si un (a,Int) si un (Char,x) si un (Char,Int). Dar este cel mai mic ultimul. |
+ | ('c',1) poate fi si un (a,Int) si un (Char,x) si un (Char,Int). Dar este<br> 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. |
+ | Intre tipuri se stabileste deci o relatie de ordine, bazata pe generalitate<br> sau - echivalent - pe posibilitatea de a obtine un tip din altul prin <br> 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: |
+ | Cand rezolvi (in tipuri!) o singura ecuatie cum este '''y f = f (y f)''' <br> s-ar putea sa obtii ca cea mai mica solutie (a sistemului format de o ecuatie) <br> va fi: |
y :: (a->a)-> a |
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. |
+ | Daca insa acea formula '''y f = f (y f)''' apare in program impreuna <br> cu '''alte ecuatii''', poti obtine dupa rezolvarea sistemului particularizari <br> (mai specifice daca vrei) ale rezultatului anterior.<br> |
− | 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 '''. |
+ | De exemplu cu ajutorul '''altor''' ecuatii din program sistemul de inferente<br> de tipuri poate decide ca acel '''a''' de mai sus poate fi particularizat <br>(deci<br> obtine un tip mai mic ca ordine a tipurilor) devenind '''b-> c '''. |
Deci y::((b->c)-> (b->c)) -> (b->c) in acest caz. |
Deci y::((b->c)-> (b->c)) -> (b->c) in acest caz. |
||
Line 25: | Line 36: | ||
y::((b->c)-> (b->c)) -> (b->c) |
y::((b->c)-> (b->c)) -> (b->c) |
||
− | sistemul Haskell o va alege pe cea mai mica, pe cea mai particulara,pe a doua ! |
+ | sistemul Haskell o va alege pe cea mai mica, pe cea mai particulara,pe <br> a doua ! |
− | Totul '''depinde deci''' (in asemenea cazuri de ambiguitate aparenta) '''de ce alte ecuatii mai exista''' in program. |
+ | Totul '''depinde deci''' (in asemenea cazuri de ambiguitate aparenta) <br>'''de ce alte ecuatii mai exista''' in program. |
Line 37: | Line 48: | ||
Evident ca are un cel mai mic x ce-o satisface. |
Evident ca are un cel mai mic x ce-o satisface. |
||
− | Sa adaugam acum inca o restrictie: x mod 2 = 1 |
+ | Sa adaugam acum inca o restrictie: <br> x mod 2 = 1 |
− | Obtin sistemul: |
+ | Obtin sistemul:<br> |
− | x mod 2= 1 |
+ | x mod 2= 1 <br> |
x >= 0 |
x >= 0 |
||
Evident ca are acum o alta 'cea mai mica solutie'. |
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. |
+ | Asa ceva se intampla si cu tipurile in Haskell, cand folosim ecuatii recursive,<br> fara indicatii exprese de tip. |
---- |
---- |
Latest revision as of 22:23, 24 January 2008
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 HaskellIn sistemul de tipuri al Haskell-ului tipul unei entitati este Ce intelegem prin cel mai mic tip ? Cel mai mic tip e inteles in sensul: Intre tipuri se stabileste deci o relatie de ordine, bazata pe generalitate Cand rezolvi (in tipuri!) o singura ecuatie cum este y f = f (y f) y :: (a->a)-> a Daca insa acea formula y f = f (y f) apare in program impreuna 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
. Explicatia prin analogieUn 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: Obtin sistemul: Evident ca are acum o alta 'cea mai mica solutie'. Asa ceva se intampla si cu tipurile in Haskell, cand folosim ecuatii recursive, Pagina indexata la indexul Categories:Ro <= Inapoi la pagina principala Ro/Haskell. |