This shows you the differences between two versions of the page.
pp:24:teme:haskell-imagini-functionale [2024/05/06 12:39] mihnea.muraru |
pp:24:teme:haskell-imagini-functionale [2024/05/11 22:42] (current) mihnea.muraru [Notă pentru curioși (facultativ)] |
||
---|---|---|---|
Line 2: | Line 2: | ||
* Data publicării: 09.04.2024 | * Data publicării: 09.04.2024 | ||
- | * Data ultimei modificări: 06.05.2024 | + | * Data ultimei modificări: 11.05.2024 |
* Deadline hard: ziua laboratorului 10 | * Deadline hard: ziua laboratorului 10 | ||
* [[https://curs.upb.ro/2023/mod/forum/view.php?id=158012|Forum temă]] | * [[https://curs.upb.ro/2023/mod/forum/view.php?id=158012|Forum temă]] | ||
Line 225: | Line 225: | ||
Este suficient ca arhiva pentru **vmchecker** să conțină modulele ''Folds'' și ''Shallow''. | Este suficient ca arhiva pentru **vmchecker** să conțină modulele ''Folds'' și ''Shallow''. | ||
+ | ==== Notă pentru curioși (facultativ) ==== | ||
+ | |||
+ | Secțiunea prezintă niște informații suplimentare despre etapa 3, și nu afectează rezolvarea temei. | ||
+ | |||
+ | Mecanismul de reducere din schelet poate fi generalizat în felul următor. În primul rând, ideea de definire a unui AST (precum ''RegionAST'') ca **punct fix al unui ''Functor''** (precum ''RegionShape''), poate fi surprinsă explicit: | ||
+ | |||
+ | <code haskell> | ||
+ | newtype Fix f = C (f (Fix f)) | ||
+ | |||
+ | type TransformationAST = Fix TransformationShape | ||
+ | type RegionAST = Fix RegionShape | ||
+ | </code> | ||
+ | |||
+ | În acest fel, poate fi definită o **unică funcțională** ''foldAST'', cu tipul mai general ''Functor f => (f a -> a) -> Fix f -> a'', pentru care funcționalele ''foldTransformationAST'' și ''foldRegionAST'' devin cazuri particulare. Constrângerea ''Functor f'' este necesară pentru utilizarea lui ''fmap'' în implementare, ca în cerința temei, care știe să propage idiosincratic reducerea la substructuri. **//Combiner//-ul** are acum tipul mai general ''f a -> a'' și poartă numele de **algebră asociată functorului** ''f''. | ||
===== Precizări ===== | ===== Precizări ===== | ||
Line 243: | Line 257: | ||
===== Changelog ===== | ===== Changelog ===== | ||
+ | * 11.05 (12:05): Publicat checker etapa 3. | ||
* 06.05 (11:40): Publicat etapa 3, enunț și schelet; urmează checker-ul. | * 06.05 (11:40): Publicat etapa 3, enunț și schelet; urmează checker-ul. | ||
* 23.04 (21:20): Publicat etapa 2. | * 23.04 (21:20): Publicat etapa 2. |