From 739af148a66311bf92d550b4c167d5c5c22039e8 Mon Sep 17 00:00:00 2001 From: anon Date: Mon, 22 Jul 2024 19:39:19 +0200 Subject: [PATCH] Added 'Haskell/10.hs' --- Haskell/10.hs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Haskell/10.hs diff --git a/Haskell/10.hs b/Haskell/10.hs new file mode 100644 index 0000000..805dfec --- /dev/null +++ b/Haskell/10.hs @@ -0,0 +1,48 @@ +import Data.List + +map' :: (a -> b) -> [a] -> [b] +map' _ [] = [] +map' f (x:xs) = f x : map' f xs + +filter' :: (a -> Bool) -> [a] -> [a] +filter' _ [] = [] +filter' f (x:xs) = if f x then x : filter' f xs else filter' f xs + +all' :: (a -> Bool) -> [a] -> Bool +all' _ [] = True +all' f (x:xs) = f x && all' f xs + +any' :: (a -> Bool) -> [a] -> Bool +any' _ [] = False +any' f (x:xs) = f x || any' f xs + +elem' :: Eq a => a -> [a] -> Bool +elem' e l = any' (\x -> x == e) l + +-- HF: +-- hasAny :: [a] -> [a] -> Bool +-- takeWhile :: ([a] -> [a]) -> [a] -> [a] +-- takewhile odd [1, 3, 5, 8, 9] + +hasAny :: Eq a => [a] -> [a] -> Bool +hasAny [] _ = False +hasAny _ [] = False +hasAny (li:lix) lh = (elem' li lh) || (hasAny lix lh) + +takeWhile' :: (a -> Bool) -> [a] -> [a] +takeWhile' _ [] = [] +takeWhile' f (a:as) + | f a = a : takeWhile' f as + | otherwise = [] + +dropWhile' :: (a -> Bool) -> [a] -> [a] +dropWhile' _ [] = [] +dropWhile' f (a:as) + | f a = [] + | otherwise = a : dropWhile' f as + +monogram :: [Char] -> [Char] +monogram s = concat (map (\x -> x : ". ") (map head (words s))) + +uniq :: Ord a => [a] -> [a] +uniq l = map head (group (sort l))