Personal tools

Poate aceeasi functie sa aiba doua tipuri in doua programe ?

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
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

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.

[edit] 1 . 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.


[edit] 2 . 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.