diff --git a/haskell/evaluare-lenesa/schelet/exemple.hs b/haskell/evaluare-lenesa/schelet/exemple.hs index f8a0ac7..5610ec3 100644 --- a/haskell/evaluare-lenesa/schelet/exemple.hs +++ b/haskell/evaluare-lenesa/schelet/exemple.hs @@ -34,11 +34,11 @@ este evaluată prin selectarea consecutivă a elementelor din `listX`, testarea predicatului `testX`, selectarea din `listY` (dacă `testX` este satisfăcut), ... Varianta cu funcționale ar arăta - map (\x y ... -> expr) $ ... $ filter testXY $ zip listY $ filter testX listX + map (\x y ... -> expr) $ ... $ filter testXY $ map (\[x, y] -> (x, y)) $ sequence [listY, filter testX listX] Funcțiile de mai sus, se traduc -- după ceva simplificări -- în: -} naturals' = [0 ..] -- map id $ filter (\x -> True) [0 ..] -increasingPairs' = filter (\(y, x) -> x < y) $ zip naturals naturals --- ^ observați folosirea `zip` și o funcție uncurry pentru `filter` +increasingPairs' = filter (\(x, y) -> x < y) $ map (\[x, y] -> (x, y)) $ sequence [naturals, naturals] +-- ^ observați folosirea `sequence` și o funcții uncurry pentru `filter` și pentru `map` factorials' = map factorial naturals diff --git a/haskell/evaluare-lenesa/solutii/exemple.hs b/haskell/evaluare-lenesa/solutii/exemple.hs index 3bc0cb0..5610ec3 100644 --- a/haskell/evaluare-lenesa/solutii/exemple.hs +++ b/haskell/evaluare-lenesa/solutii/exemple.hs @@ -28,17 +28,17 @@ Cum se traduc list-comprehensions în expresii simple cu funcționale? O expresie de forma - [expr | x <- listX, testX, y <- listY, testXY, ...] + [expr | x <- listX, textX, y <- listY, testXY, ...] este evaluată prin selectarea consecutivă a elementelor din `listX`, testarea predicatului `testX`, selectarea din `listY` (dacă `testX` este satisfăcut), ... Varianta cu funcționale ar arăta - map (\x y ... -> expr) $ ... $ filter testXY $ zip listY $ filter testX listX + map (\x y ... -> expr) $ ... $ filter testXY $ map (\[x, y] -> (x, y)) $ sequence [listY, filter testX listX] Funcțiile de mai sus, se traduc -- după ceva simplificări -- în: -} naturals' = [0 ..] -- map id $ filter (\x -> True) [0 ..] -increasingPairs' = filter (\(y, x) -> x < y) $ zip naturals naturals --- ^ observați folosirea `zip` și o funcție uncurry pentru `filter` +increasingPairs' = filter (\(x, y) -> x < y) $ map (\[x, y] -> (x, y)) $ sequence [naturals, naturals] +-- ^ observați folosirea `sequence` și o funcții uncurry pentru `filter` și pentru `map` factorials' = map factorial naturals diff --git a/haskell/tipuri/README.md b/haskell/tipuri/README.md index 738bf2a..d8d12df 100644 --- a/haskell/tipuri/README.md +++ b/haskell/tipuri/README.md @@ -1,7 +1,7 @@ # Haskell: Tipuri de date utilizator - Data publicării: 10.04.2024 -- Data ultimei modificări: 10.04.2024 +- Data ultimei modificări: 19.04.2024 ## Obiective @@ -253,7 +253,7 @@ data Natural = Zero | Succ Natural deriving Show ## newtype -Construcția `newtype` este similară cu `data`, cu diferența că ne permite crearea unui tip de date cu **un singur** constructor, pe baza altor tipuri de date existente. De exemplu: +Construcția `newtype` este similară cu `data`, cu diferența că ne permite crearea unui tip de date cu **un singur** constructor și **cu un singur** câmp, pe baza altor tipuri de date existente. De exemplu: ```haskell newtype Celsius = MakeCelsius Float deriving Show