Differences

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

Link to this comparison view

pp:26:teme:haskell-graphs-draft [2026/05/13 17:00]
mihnea.muraru [Etapa 4]
pp:26:teme:haskell-graphs-draft [2026/05/13 17:37] (current)
mihnea.muraru [Changelog]
Line 251: Line 251:
     * Instanța clasei ''​%%Foldable%%''​ permite reducerea unui graf la o valoare.     * Instanța clasei ''​%%Foldable%%''​ permite reducerea unui graf la o valoare.
     * Funcția ''​nodesWithFoldr''​ constituie o alternativă la funcția ''​nodes''​ din etapele 2-3, dar implementată de data aceasta cu ''​foldr''​.     * Funcția ''​nodesWithFoldr''​ constituie o alternativă la funcția ''​nodes''​ din etapele 2-3, dar implementată de data aceasta cu ''​foldr''​.
-    * +    * Funcția ''​nodesEdges''​ combină prin **//​tupling//​** comportamentele funcțiilor ''​nodes''​ și ''​edges''​ într-o singură transformare compozițională,​ **mai eficientă** decât vechea implementare a lui ''​edges'',​ dar din păcate **mai puțin modulară**. 
 +      * **Atenție!** Scopul este de a **nu** elabora de la zero implementarea,​ ci de a o obține prin **//​equational reasoning//​** urmărind indicațiile din comentarii. 
 +    * Constructorul de tip ''​AlgebraicGraphFolder''​ și funcția ''​foldAlgebraicGraph'',​ **deja implementate**,​ constituie un mecanism de **reducere** croit pe constructorul de tip ''​AlgebraicGraph'',​ fiind astfel mai expresiv decât instanța de ''​Foldable''​. 
 +    * Operatorii ''​(<​+>​)''​ și ''​(>​.>​)'',​ **deja implementați**,​ permit **combinarea** unor ''​AlgebraicGraphFolder''​-e **independente**,​ respectiv **semidependente**. 
 +    * Funcția ''​nodes''​ este reimplementată utilizând noul mecanism de reducere. 
 +    * Funcția ''​isNode''​ verifică dacă un nod apare într-un graf, utilizând noul mecanism de reducere. 
 +    * Funcția ''​edges''​ este reimplementată prin **asamblarea** ''​AlgebraicGraphFolder''​-ului aferent funcției ''​nodes'',​ cu un alt ''​AlgebraicGraphFolder'',​ într-o manieră **semidependentă**,​ obținându-se concomitent un **plus** de eficiență,​ modularitate și reutilizare. 
 +  * ''​StandardGraph''​ 
 +    * Este cel din etapa 1, și este necesar următorului modul. 
 +    * Nu trebuie nimic implementat suplimentar aici. 
 +  * ''​Algorithms''​ 
 +    * Funcția ''​dfsStack''​ constituie o alternativă mai eficientă, bazată pe o stivă, a funcției ''​dfs''​ din etapa 1, în care fiecare element este vizitat cel mult o dată. 
 +      * **Atenție!** Scopul este de a **nu** elabora de la zero implementarea,​ ci de a o obține prin **//​equational reasoning//​** pornind de la implementarea din etapa 1 și de la indicațiile din comentarii.
  
-constrângeri+Se impun următoarele **constrângeri**: 
 + 
 +  * Pentru funcțiile ''​nodesEdges''​ din modulul ''​AlgebraicGraph''​ și ''​dfsStack''​ din modulul ''​Algorithms'',​ a căror implementare trebuie obținută prin **//​equational reasoning//​**,​ trebuie să redactați în comentarii, în porțiunea ''​DERIVARE:​ ...'',​ pașii prin care ați trecut (vedeți exemplele și exercițiile din laboratorul 11).
  
 Este suficient ca arhiva pentru **vmchecker** să conțină modulele ''​AlgebraicGraph'',​ ''​StandardGraph''​ și ''​Algorithms''​. Este suficient ca arhiva pentru **vmchecker** să conțină modulele ''​AlgebraicGraph'',​ ''​StandardGraph''​ și ''​Algorithms''​.
Line 259: Line 273:
 ==== Depunctări ==== ==== Depunctări ====
  
-Funcțiile care nu respectă constrângerile din schelet vor fi **depunctate total**.+Funcțiile care nu respectă constrângerile ​de mai sus sau pe cele din schelet vor fi **depunctate total**.
  
  
Line 273: Line 287:
   * [[https://​ocw.cs.pub.ro/​courses/​_media/​pp/​26/​teme/​haskell/​etapa2.zip|Schelet etapa 2]]   * [[https://​ocw.cs.pub.ro/​courses/​_media/​pp/​26/​teme/​haskell/​etapa2.zip|Schelet etapa 2]]
   * [[https://​ocw.cs.pub.ro/​courses/​_media/​pp/​26/​teme/​haskell/​etapa3.zip|Schelet etapa 3]]   * [[https://​ocw.cs.pub.ro/​courses/​_media/​pp/​26/​teme/​haskell/​etapa3.zip|Schelet etapa 3]]
 +  * [[https://​ocw.cs.pub.ro/​courses/​_media/​pp/​26/​teme/​haskell/​etapa4.zip|Schelet etapa 4]]
  
 ===== Referințe ===== ===== Referințe =====
Line 280: Line 295:
 ===== Changelog ===== ===== Changelog =====
  
-  * 13.05, 17:30: Publicat etapa 4+  * 13.05, 17:40: Publicat etapa 4
   * 09.05, 21:02: Adăugat clarificare la etapa 2 despre semnificația constrângerii de recursivitate explicită.   * 09.05, 21:02: Adăugat clarificare la etapa 2 despre semnificația constrângerii de recursivitate explicită.
pp/26/teme/haskell-graphs-draft.1778680829.txt.gz · Last modified: 2026/05/13 17:00 by mihnea.muraru
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