Magasabbrendű függvények
- Due Apr 23, 2023 by 11:59pm
- Points 10
- Submitting a file upload
1. Alapfüggvények
(5 pont)
Implementáljátok a funkcionális nyelveknek alábbi alapfüggvényeit:
takeWhile :: (a -> Bool) -> [a] -> [a]
Visszatéríti egy lista elejéről az elemeket mindaddig, amíg egyik nem felel meg már egy adott feltételnek.
takeWhile (<5) [1,2,3,4,5,6,5,4,3,2] ⇒ [1, 2, 3, 4]
dropWhile :: (a -> Bool) -> [a] -> [a]
Levágja egy lista elejéről az elemeket mindaddig, amíg egyik nem felel meg már egy adott feltételnek, majd a többit visszatéríti.
dropWhile (<5) [1,2,3,4,5,6,5,4,3,2] ⇒ [5, 6, 5, 4, 3, 2]
iterate :: (a -> a) -> a -> [a]
Egy végtelen listát készít, melynek adott kezdőértékből indul, és minden elem az előtte levő elemnek egy függvény alkalmazása.
take 10 (iterate (*2) 1) ⇒ [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
all :: (a -> Bool) -> [a] -> Bool
Leellenőrzi, hogy egy lista minden eleme megfelel-e adott feltételnek.
all even [2,4..10] ⇒ True
any :: (a -> Bool) -> [a] -> Bool
Leellenőrzi, hogy egy listának létezik-e olyan eleme, mely megfelel adott feltételnek.
any even [1..10] ⇒ True
2. Funkcionális minták alkalmazásai
-- használjátok a magasabbrendű függvényeket --
(5p)
deleteAll :: Eq a => a -> [a] -> [a]
deleteAll e list -- törli az összes 'e' elemet a 'list' listából.
Pl. deleteAll 'a' "almaafaalatt" = "lmfltt"
countAll :: Eq a => a -> [a] -> Int
countAll e list -- megszámolja az 'e' elem előfordulását a 'list' listában.
Pl. countAll 'a' "almaafaalatt" = 6
histogram :: Eq a => [a] -> [(a,Int)]
histogram list -- a 'list' elem-gyakoriság párosait téríti vissza.
Pl histogram "almaafaalatt" = [('a',6),('l',2),('m',1),('f',1),('t',2)]
permInv :: [Int] -> [Int]
permInv list -- visszatéríti a lista -- mint permutáció -- inverzét.
Pl. permInv [5,6,1,2,4,3] = [ 3, 4, 6, 5, 1, 2]