This shows you the differences between two versions of the page.
pp:22:teme:haskell-prezentare [2022/04/26 19:35] mihnea.muraru created |
pp:22:teme:haskell-prezentare [2022/05/09 19:54] (current) mihnea.muraru |
||
---|---|---|---|
Line 13: | Line 13: | ||
* cum ai derivat bfs și dfs din search? | * cum ai derivat bfs și dfs din search? | ||
* cum se valorifică evaluarea leneșă la countIntermediate? | * cum se valorifică evaluarea leneșă la countIntermediate? | ||
+ | |||
+ | Etapa 2 | ||
+ | * cum ai redefinit StandardGraph folosind data (**întrebare obligatorie**, vedeți spreadsheet)? | ||
+ | * exemplu <code haskell> | ||
+ | data StandardGraph a = SG { nodes :: S.Set a, edges :: S.Set (a, a) } | ||
+ | fromComponents ns es = SG (S.fromList ns) (S.fromList es) | ||
+ | </code> | ||
+ | * cum ai implementat funcția x? | ||
+ | * ce tipar comun ai observat la funcțiile removeNode, splitNode, mergeNodes? | ||
+ | * R: prelucrarea propriu-zisă e doar pt constructorul Node, în rest se propagă recursiv | ||
+ | * cum ai generat partițiile utilizând list comprehensions (dacă au respectat hint-ul)? | ||
+ | * care e un avantaj al reprezentării din etapa 2 vs reprezentarea din etapa 1? | ||
+ | |||
+ | Etapa 3 | ||
+ | * cum ai definit clasa care generalizează conceptul de graf: parametrizată cu tipul concret sau cu constructorul de tip (**întrebare obligatorie**, vedeți enunț și spreadsheet)? de ce? | ||
+ | * R: parametrizată cu constructorul de tip în sine, pentru a expune tipul etichetelor nodurilor | ||
+ | * care este tipul funcției nodes, presupunând că e definită în interiorul clasei (**întrebare obligatorie**, vedeți enunț și spreadsheet)? | ||
+ | * R: <code haskell> | ||
+ | nodes :: Graph g => g a -> S.Set a | ||
+ | </code> | ||
+ | * ce face fromInteger din Num? | ||
+ | * de ce nu este suficientă instanța implicită de Eq obținută cu deriving? | ||
+ | * R: compară prea strict reprezentările simbolice | ||
+ | * care a fost cea mai generală funcțională, care a permis implementarea tuturor celorlalte funcții din AlgebraicGraph? | ||
+ | * R: extend | ||
+ | * care este diferența dintre extend și fmap? | ||
+ | * R: fmap nu modifică structura, ci doar etichetele | ||
+ | * cum au simplificat mulțimile implementarea lui isModule? | ||
+ | * R: S.map poate reduce dimensiunea mulțimii => compararea lungimii cu 1 | ||
+ | * cum au simplificat mulțimile implementarea lui isModularPartition? | ||
+ | * R: similar cu isModule | ||
+ | * cum ai determinat partiția maximală? |