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:25]
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:
Line 230: Line 230:
   * ''​%%Fractional%%''​ -- clasă pentru numere reprezentabile ca fracții - definește funcția ''​%%(/​)%%''​   * ''​%%Fractional%%''​ -- clasă pentru numere reprezentabile ca fracții - definește funcția ''​%%(/​)%%''​
   * ''​%%Floating%%''​ -- clasă pentru numere reale - definește funcții ca ''​%%sqrt%%'',​ ''​%%exp%%'',​ ''​%%sin%%'',​ ''​%%cos%%'',​ etc.   * ''​%%Floating%%''​ -- clasă pentru numere reale - definește funcții ca ''​%%sqrt%%'',​ ''​%%exp%%'',​ ''​%%sin%%'',​ ''​%%cos%%'',​ etc.
-  * ''​%%Monad%%''​ -- definește tipuri care pot reprezenta acțiuni monadice. Mai multe despre monade aici: Monade([[http://​book.realworldhaskell.org/​read/​monads.html|http:​%%//​%%book.realworldhaskell.org/​read/​monads.html]] "​wikilink"​)+  * ''​%%Monad%%''​ -- definește tipuri care pot reprezenta acțiuni monadice. Mai multe despre monade aici: [[http://​book.realworldhaskell.org/​read/​monads.html|Monade]]
  
 ===== Deriving ===== ===== Deriving =====
Line 321: Line 321:
 Pentru a afla informații despre clase în ''​%%ghci%%''​ se poate utiliza comanda ''​%%:​info <​typeclass%%''​ unde typeclass este clasa despre care dorim să aflăm informații. Pentru a afla informații despre clase în ''​%%ghci%%''​ se poate utiliza comanda ''​%%:​info <​typeclass%%''​ unde typeclass este clasa despre care dorim să aflăm informații.
  
-Mai multe detalii ​aici([[http://​www.haskell.org/​tutorial/​classes.html|http:​%%//​%%www.haskell.org/​tutorial/​classes.html]] "​wikilink"​)+Mai multe detalii [[http://​www.haskell.org/​tutorial/​classes.html|aici]]
  
 ===== Resurse ===== ===== Resurse =====
pp/21/laboratoare/haskell/clase.1618863950.txt.gz · Last modified: 2021/04/19 23:25 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