Files
book-exercises/Haskell-book/10/Exercise.hs
2025-12-09 16:32:32 +01:00

54 lines
1.3 KiB
Haskell

module Exercise where
stops :: String
stops = "pbtdkg"
vowels :: String
vowels = "aeiou"
stopVowelStop :: [(Char, Char, Char)]
stopVowelStop = filter p [(x, y, z) | x <- stops, y <- vowels, z <- stops]
where p (a, _, _) = a == 'p'
seekritFunc :: String -> Double
seekritFunc x = (/) (fromIntegral (sum (map length (words x)))) (fromIntegral (length (words x)))
myAnd :: [Bool] -> Bool
myAnd = foldr (&&) True
myOr :: [Bool] -> Bool
myOr = foldr (||) False
myAny :: (a -> Bool) -> [a] -> Bool
myAny f = myOr . map f
myElem :: Eq a => a -> [a] -> Bool
myElem x = foldr (\y z -> z || (y == x)) False
myElem' :: Eq a => a -> [a] -> Bool
myElem' needle = any (\x -> x == needle)
myReverse :: [a] -> [a]
myReverse = foldl (flip (:)) []
myMap :: (a -> b) -> [a] -> [b]
myMap f = foldr (\x y -> (f x) : y) []
myFilter :: (a -> Bool) -> [a] -> [a]
myFilter f = foldr (\x xs -> if f x then x : xs else xs) []
squish :: [[a]] -> [a]
squish = foldr (++) []
squishMap :: (a -> [b]) -> [a] -> [b]
squishMap f xs = foldr (++) [] (map f xs)
squishAgain :: [[a]] -> [a]
squishAgain = squishMap id
myMaximumBy :: (a -> a -> Ordering) -> [a] -> a
myMaximumBy f (z:zs) = foldl (\x y -> if (f x y) == GT then x else y) z zs
myMinimumBy :: (a -> a -> Ordering) -> [a] -> a
myMinimumBy f (z:zs) = foldl (\x y -> if (f x y) == LT then x else y) z zs