7. gyakorlat
Lambda függvény
Névtelen függvény
Több paraméterrel
f :: Int -> (Int -> Int)
f alma = \körte -> alma + 2 * körte
-- Ez ugyanaz, mint a ...
f :: Int -> Int -> Int
f alma körte = alma + 2 * körte
-- És a...
f :: (Int -> (Int -> Int))
f = \alma -> \körte -> alma + 2 * körte
Parciális applikáció
Olyan függvény, amelynek csak valamennyi paramétere lett átadva(nem az összes)
Eredmény egy olyan függvény lesz, ami a maradék paramétereket várja, és "konstanssal" dolgozik
Totális applikáció
Olyan függvény, amelynek minden paramétere át lett adva.
addAll1 :: Num a => [a] -> [a]
addAll1 [] = []
addAll1 (x:xs) = (x + 1) : addAll1 xs
toUpperAll :: String -> String
toUpperAll [] = []
toUpperAll (x:xs) = toUpper x : toUpperAll xs
map
-- This is where the fun begins c:
map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' f (x:xs) = f (x) : map f xs
g :: Num a => a -> a
g x = x + 1
-- működik lambdával, currying, másik függvényekkel
map' (+1) [1,2,3] == [2,3,4] -- epic
map' (\x -> x+1) [1,2,3] == [2,3,4] -- also works
map' g [1,2,3] == [2,3,4] -- also works
filter
filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' f (x:xs)
| f x = x : filter' f xs
| otherwise = filter' f xs
span & Co. Limited
takeWhile :: (a -> Bool) -> [a] -> [a]
takeWhile _ [] = []
takeWhile p (x:xs)
| p x = x : takeWhile p xs
| otherwise = []
dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile _ [] = []
dropWhile p l@(x:xs)
| p x = dropWhile p xs
| otherwise = l
span :: (a -> Bool) -> [a] -> ([a], [a])
span _ [] = ([], [])
span f list@(x:xs)
| f x = (x:as, bs) -- elem hozzáadása az első listához, ha arra teljesül a `p`
| otherwise = ([], list) -- más esetben második listához hozzáfűzés
where
(as, bs) = span f xs
break :: (a -> Bool) -> [a] -> ([a], [a])
break f xs = span (\x -> not (p x)) xs
break f = span (\x -> not (p x))
break f = span (not . p) -- chad move
Függvénykompozíció
iterate
💰 operátor
zipWith
Apparently useful in hw
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
zipWith _ _ _ = []