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:12]
mihnea.muraru [Etapa 4]
pp:26:teme:haskell-graphs-draft [2026/05/13 17:37] (current)
mihnea.muraru [Changelog]
Line 252: Line 252:
     * 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ă**.     * 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''​.     * 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**.     * 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 ''​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 ''​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ă**.+    * 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 264: 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 278: 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 285: 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.1778681526.txt.gz · Last modified: 2026/05/13 17:12 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