This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:04-tipuri-de-date-abstracte [2016/03/20 23:36] mihai.dumitru2201 Scop - Maybe |
laboratoare:04-tipuri-de-date-abstracte [2016/03/24 14:54] (current) mihai.dumitru2201 Correction |
||
|---|---|---|---|
| Line 7: | Line 7: | ||
| Scopul laboratorului: | Scopul laboratorului: | ||
| * Recapitularea conceptului de TDA | * Recapitularea conceptului de TDA | ||
| - | * Definirea unor TDA-uri în Haskell | + | * Definirea de TDA-uri în Haskell |
| * Familiarizarea cu conceptul de TDA-uri polimorfice | * Familiarizarea cu conceptul de TDA-uri polimorfice | ||
| * Introducerea tipului de date ''Maybe'' | * Introducerea tipului de date ''Maybe'' | ||
| Line 17: | Line 17: | ||
| Un TDA familiar este **list**. În primul laborator am lucrat cu liste de întregi, definind o listă ca fiind fie lista vidă, fie un întreg introdus în altă listă. Deasemena am definit o mulțime de operații posibile pe listă: ''isEmpty'', ''head'', ''tail'', ''add'', ''get'', ''ins'', ''show''.\\ | Un TDA familiar este **list**. În primul laborator am lucrat cu liste de întregi, definind o listă ca fiind fie lista vidă, fie un întreg introdus în altă listă. Deasemena am definit o mulțime de operații posibile pe listă: ''isEmpty'', ''head'', ''tail'', ''add'', ''get'', ''ins'', ''show''.\\ | ||
| - | Pentru a lucra cu liste într-un limbaj ca C, am scris două //implementări// distincte, și anume ''LinkedList'' și ''ArrayList''. Ambele implementări respectă specificațiile din primul paragraf. | + | Pentru a lucra cu liste într-un limbaj ca Java, am scris două //implementări// distincte, și anume ''LinkedList'' și ''ArrayList''. Ambele implementări respectă specificațiile din primul paragraf. |
| <note important> | <note important> | ||
| - | Unii autori includ în descrierea TDA-urilor și complexități. Din acest punct de vedere, implementările pentru | + | Unii autori includ în descrierea TDA-urilor și complexități. Din acest punct de vedere, implementările |
| ''LinkedList'' și ''ArrayList'' diferă. | ''LinkedList'' și ''ArrayList'' diferă. | ||
| </note> | </note> | ||
| Line 63: | Line 63: | ||
| Observăm prezența a două pattern-uri: unul pentru arborele vid, celălalt pentru un nod, într-un fel foarte asemănător cu modul în care lucram cu liste, făcând pattern matching pe ''[]'' și ''(x:xs)''. | Observăm prezența a două pattern-uri: unul pentru arborele vid, celălalt pentru un nod, într-un fel foarte asemănător cu modul în care lucram cu liste, făcând pattern matching pe ''[]'' și ''(x:xs)''. | ||
| - | |||
| - | |||
| - | ==== Exerciții TDA ==== | ||
| - | |||
| - | 1. Implementați TDA-ul pentru propria voastră listă care poate conține doar numere întregi. | ||
| <note tip> | <note tip> | ||
| Line 93: | Line 88: | ||
| </code> | </code> | ||
| </note> | </note> | ||
| + | |||
| + | ==== Exerciții TDA ==== | ||
| + | |||
| + | 1. Implementați TDA-ul pentru propria voastră listă care poate conține doar numere întregi. | ||
| 2. Scrieți o funcție care convertește valori ale TDA-ului vostru în liste din Haskell. | 2. Scrieți o funcție care convertește valori ale TDA-ului vostru în liste din Haskell. | ||
| Line 278: | Line 277: | ||
| <code haskell> | <code haskell> | ||
| - | List a = Empty | Cons a (List a) | + | data List a = Empty | Cons a (List a) |
| </code> | </code> | ||
| Line 289: | Line 288: | ||
| ==== Exerciții TDA-uri polimorfice ==== | ==== Exerciții TDA-uri polimorfice ==== | ||
| + | |||
| + | <note important> | ||
| + | Încercați să vă obișnuiți să scrieți explicit tipurile tuturor funcțiilor definite de voi în continuare. | ||
| + | </note> | ||
| 5. Pornind de la TDA-ul polimorfic ''List a'' definit mai sus: | 5. Pornind de la TDA-ul polimorfic ''List a'' definit mai sus: | ||
| Line 295: | Line 298: | ||
| b) Implementați ''foldl'', ''foldr'' și ''map'' pentru TDA-ul creat. | b) Implementați ''foldl'', ''foldr'' și ''map'' pentru TDA-ul creat. | ||
| - | \\ | ||
| \\ | \\ | ||
| 6. a) Implementați TDA-ul pentru arbori polimorfici.\\ | 6. a) Implementați TDA-ul pentru arbori polimorfici.\\ | ||
| Line 305: | Line 307: | ||
| g) Implementați ''tmap'' pe baza ''foldT''.\\ | g) Implementați ''tmap'' pe baza ''foldT''.\\ | ||
| - | \\ | ||
| \\ | \\ | ||
| 7. a) Implementați TDA-ul ''Pereche'', care poate conține două valori de orice tip.\\ | 7. a) Implementați TDA-ul ''Pereche'', care poate conține două valori de orice tip.\\ | ||
| Line 315: | Line 316: | ||
| * [[https://wiki.haskell.org/Maybe|Maybe - Haskell wiki]] | * [[https://wiki.haskell.org/Maybe|Maybe - Haskell wiki]] | ||
| - | ===== Solutii laborator ===== | + | ===== Soluții laborator ===== |
| - | * [[https://github.com/Programming-Paradigms/Labs/archive/master.zip|Rezolvari]] | + | * [[https://github.com/Programming-Paradigms/Labs/archive/master.zip|Rezolvări]] |