Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pp:21:laboratoare:haskell:clase [2021/04/19 23:29]
bot.pp
pp:21:laboratoare:haskell:clase [2021/04/24 19:18] (current)
bot.pp
Line 2: Line 2:
  
   * Data publicării:​ 19.04.2021   * Data publicării:​ 19.04.2021
-  * Data ultimei modificări: ​19.04.2021+  * Data ultimei modificări: ​20.04.2021
  
 ===== Obiective ===== ===== Obiective =====
Line 19: Line 19:
 Polimorfismul este un mecanism al limbajului Haskell (și nu doar al acestuia) prin care se poate defini un **set de operații (interfață comună)** pentru mai multe tipuri. Categoriile de polimorfism pe care le vom întâlni cel mai des în Haskell sunt: parametric și ad-hoc. Polimorfismul este un mecanism al limbajului Haskell (și nu doar al acestuia) prin care se poate defini un **set de operații (interfață comună)** pentru mai multe tipuri. Categoriile de polimorfism pe care le vom întâlni cel mai des în Haskell sunt: parametric și ad-hoc.
  
-====== Polimorfism parametric ​======+===== Polimorfism parametric =====
  
 Așa cum ați observat în laboratoarele anterioare, Haskell permite definirea de funcții care operează pe structuri de date generice. Să luăm spre exemplu funcția ''​%%length%%''​. Aceasta permite calcularea lungimii oricărei liste, indiferent de tipul elementelor din listă. Această proprietate a limbajului poartă denumirea de **polimorfism parametric**. Așa cum ați observat în laboratoarele anterioare, Haskell permite definirea de funcții care operează pe structuri de date generice. Să luăm spre exemplu funcția ''​%%length%%''​. Aceasta permite calcularea lungimii oricărei liste, indiferent de tipul elementelor din listă. Această proprietate a limbajului poartă denumirea de **polimorfism parametric**.
Line 63: Line 63:
  
 </​code>​ </​code>​
-Elementul de noutate este ''​%%Eq a =>​%%''​. Acesta se numește **constrângere de tip** și apare ca urmare a folosirii funcției ''​%%(==)%%''​. Spre deosebire de funcția ''​%%length%%'',​ care putea fi folosită indiferent de tipul listei, funcția ''​%%elem%%''​ este generică într-un sens mai restrâns. Ea funcționează doar pentru liste cu elemente care definesc egalitatea (operatorul ==).+Elementul de noutate este ''​%%Eq a =>​%%''​. Acesta se numește **constrângere de tip** și apare ca urmare a folosirii funcției ''​%%(==)%%''​. Spre deosebire de funcția ''​%%length%%'',​ care putea fi folosită indiferent de tipul listei, funcția ''​%%elem%%''​ este generică într-un sens mai restrâns. Ea funcționează doar pentru liste cu elemente care definesc egalitatea (operatorul ​''​%%==%%''​).
  
 Cu alte cuvinte, ''​%%elem%%''​ poate fi aplicată pentru o listă de ''​%%Int%%''​ sau ''​%%String%%'',​ pentru că știm să definim egalitatea pentru aceste tipuri, dar nu și pentru o listă de funcții. Deși pare neintuitiv, următoarea expresie: Cu alte cuvinte, ''​%%elem%%''​ poate fi aplicată pentru o listă de ''​%%Int%%''​ sau ''​%%String%%'',​ pentru că știm să definim egalitatea pentru aceste tipuri, dar nu și pentru o listă de funcții. Deși pare neintuitiv, următoarea expresie:
pp/21/laboratoare/haskell/clase.1618864182.txt.gz · Last modified: 2021/04/19 23:29 by bot.pp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0