===== Laborator 6 - Aplicatii cu TDA-uri =====
::= | | + | * | ()
::= string
::= orice
::= = | if then else | ; | return
- Definiti un tip de date care codifica expresii '''' generate de gramatica BNF de mai sus
* Tipul definit de voi va fi monomorfic sau polimorfic?
- Inrolati tipul vostru in clasa ''Show''. Definiti explicit o reprezentare (usor de urmarit)
- Definiti o expresie formata cu intregi (care va fi folosita ulterior pentru testare)
- Definiti un tip care reprezinta o multime de asocieri ale unor variabile la valori. Obiecte avand un astfel de tip sunt //interpretari// pentru o multime de variable. Interpretarea pentru o variabila consta intr-o valoare.
- Definiti o functie ''eval'' care determina rezultatul unei expresii, pe baza unei interpretari:
* scrieti signatura pentru ''eval''
* realizati implementarea efectiva
- Definiti un tip de date care codifica expresii '''' generate de gramatica BNF de mai sus.
* Tipul definit de voi va fi monomorfic sau polimorfic?
- Inrolati tipul definit de voi in clasa ''Show''.
- 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 ''''. Observati faptul ca implementarea procedurii de evaluare a fost realizata anterior.
* Realizati o instanta a ''Evaluable'' pentru constructorul de tip al ''''. 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]]