This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:06-aplicatii-cu-tda-uri [2015/03/30 17:05] matei.popovici |
laboratoare:06-aplicatii-cu-tda-uri [2015/05/07 13:48] (current) radu.stoenescu |
||
---|---|---|---|
Line 3: | Line 3: | ||
<expr> ::= <valoare> | <variabila> | <expr> + <expr> | <expr> * <expr> | (<expr>) | <expr> ::= <valoare> | <variabila> | <expr> + <expr> | <expr> * <expr> | (<expr>) | ||
<variabila> ::= string | <variabila> ::= string | ||
- | <valoare> :: orice | + | <valoare> ::= orice |
- | <program> ::= <variabila> = <expr> | if <expr> then <prog> else <prog> | <prog> ; <prog> | return <variabila> | + | <prog> ::= <variabila> = <expr> | if <expr> then <prog> else <prog> | <prog> ; <prog> | return <variabila> |
</code> | </code> | ||
- Definiti un tip de date care codifica expresii ''<expr>'' generate de gramatica BNF de mai sus | - Definiti un tip de date care codifica expresii ''<expr>'' generate de gramatica BNF de mai sus | ||
Line 15: | Line 15: | ||
* scrieti signatura pentru ''eval'' | * scrieti signatura pentru ''eval'' | ||
* realizati implementarea efectiva | * realizati implementarea efectiva | ||
- | - Definiti un tip de date care codifica expresii ''<program>'' generate de gramatica BNF de mai sus. | + | - Definiti un tip de date care codifica expresii ''<prog>'' generate de gramatica BNF de mai sus. |
* Tipul definit de voi va fi monomorfic sau polimorfic? | * Tipul definit de voi va fi monomorfic sau polimorfic? | ||
- Inrolati tipul definit de voi in clasa ''Show''. | - Inrolati tipul definit de voi in clasa ''Show''. | ||
- | - Definiti o clasa (type-class) care modeleaza **o relatie** intre un **tip container** si un **tip continut** de containerul respectiv. Relatia specifica faptul ca tipul container poate fi evaluat, in raport cu o interpretare pentru elemente de tipul continut de container. | + | - Definiti o clasa (type-class) ''Evaluable'' care modeleaza faptul ca o valoare **de tip //container//** poate fi evaluata la o valoare de **tipul continut** de containerul respectiv. |
+ | * Clasa pune la dispozitie o singura operatie ''eval'' care generalizeaza operatia eval definita pentru expresii | ||
+ | * Realizati o instanta a ''Evaluable'' pentru constructorul de tip al ''<expr>''. Observati faptul ca implementarea procedurii de evaluare a fost realizata anterior. | ||
+ | * Realizati o instanta a ''Evaluable'' pentru constructorul de tip al ''<program>''. Mai exact, implementati evaluarea unui program. | ||
+ | * In implementare, observati ca interpretarea se modifica pe masura ce programul este evaluat. | ||
+ | * Asadar, aveti nevoie de o functie auxiliara, care construieste o interpretare, pe baza unui program | ||
+ | |||
+ | [[https://github.com/Programming-Paradigms/Labs/archive/master.zip|Solutii]] |