User Tools

Site Tools


laboratoare:05-polimorfism

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
laboratoare:05-polimorfism [2016/04/05 15:44]
matei.popovici
laboratoare:05-polimorfism [2016/04/05 15:58] (current)
matei.popovici
Line 139: Line 139:
  
 care trateaza cazurile in care ''​top'',​ ''​pop''​ si ''​mpop''​ produc eroare. care trateaza cazurile in care ''​top'',​ ''​pop''​ si ''​mpop''​ produc eroare.
 +//Hint:// Pentru ''​mpop'',​ folositi **case** si **guards**.
  
 +2. Inrolati ''​FIFO a''​ in clasa ''​Show''​
  
 +3. Definiti un tip de date asociat urmatoarei gramatici:
 +<​code>​
 +   <​expr>​ ::= <​value>​ | <​variable>​ | <​expr>​ + <​expr>​ | <​expr>​ * <​expr> ​
 +</​code>​
 +unde o valoare poate avea orice tip.
  
 +4. Consideram urmatorul constructor de tip:
 +<​code>​
 +type Dictionary a = [(String,​a)]
 +</​code>​
 +care modeleaza //​dictionare//​ - mapari de tip "​nume-variabila"​-"​valoare polimorfica"​
 +
 +Definiti functia:
 +<​code>​valueof :: Dictionary a -> String -> Result a</​code>​
 +care intoarce valoarea asociata unui nume-variabila,​ dintr-un dictionar
 +
 +5. Definiti urmatoarea clasa:
 +<​code>​
 +class Eval t a where
 +    eval :: Dictionary a -> t a -> Result a
 +</​code>​
 +
 +Spre deosebire de clasele prezentate in exemplele anterioare, care desemneaza o //​proprietate//​ a unui tip sau constructor de tip, ''​Eval''​ stabileste o **relatie** intre un constructor de tip ''​t''​ si un tip ''​a''​. Relatia spune ca orice container de tip ''​t a''​ poate fi evaluat in prezenta unui dictionar cu valori de tip ''​a'',​ la o valoare de tip ''​Result a''​.
 +
 +6. Inrolati ''​Expr''​ si ''​Integer''​ in clasa ''​Eval''​. Care este semnificatia evaluarii?
 +
 +7. Inrolati ''​Expr''​ si ''​FIFO a''​ in clasa ''​Eval''​. Semnificatia inmultirii este //​concatenarea//​ a doua FIFO. 
  
 ===== Alte exercitii ===== ===== Alte exercitii =====
laboratoare/05-polimorfism.1459860246.txt.gz · Last modified: 2016/04/05 15:44 by matei.popovici