Funkcionális programozás gyakorlat

4. feladatsor

Beadandó feladat

Készíts olyan függvényt, amely egy paramétert vár (n). Visszatérési értéke egy értékből és egy listából álló párok sorozat; az érték és a lista mindig kiadja az [1..n] intervallumot.

separate :: Int -> [(Int, [Int])]

Példa:

separate 5      ↦       [(1,[2,3,4,5])
,(2,[1,3,4,5])
,(3,[1,2,4,5])
,(4,[1,2,3,5])
,(5,[1,2,3,4])]

A függvényt a beadandókezelő rendszerbe töltsd föl.

Feladat

Definiáld a swap függvényt, amely megcseréli egy pár elemeit!

swap :: (a, b) -> (b, a)

Feladat

Definiáld két lista összefűzését, valamint listák listájának összefűzését.

(++)   :: [a] -> [a] -> [a]
concat :: [[a]] -> [a]
import Prelude hiding ((++), concat)

Ehhez fel kell használni a listákra való mintaillesztést:

f (x:xs) = ...

Feladat

Lista megfordítása.

reverse :: [a]{-véges-} -> [a]
import Prelude hiding (reverse)

Feladat

Lista utolsó n eleme, illetve az utolsó n elem elhagyása.

reverseTake :: Int -> [a]{-véges-} -> [a]
reverseDrop :: Int -> [a]{-véges-} -> [a]

Példa:

reverseTake 3 [1..10]   ↦       [8,9,10]
reverseDrop 3 [1..10] ↦ [1,2,3,4,5,6,7]

Extra

Definiáld az alábbi, listákra vonatkozó függvényeket mintaillesztéssel.

head :: [a] -> a
tail :: [a]{-nemüres-} -> [a]
null :: [a] -> Bool
import Prelude hiding (head, tail, null)

Extra

Szorozd össze egy lista elemeit. Az üres lista szorzata legyen 1.

product :: [Int]{-véges-} -> Int
import Prelude hiding (product)

Extra

Találd meg egy lista elemeinek minimumát.

minimum :: [Int]{-véges, nemüres-} -> Int
import Prelude hiding (minimum)

Extra

Számold meg, hány páros szám van egy szövegben.

numOfEvens :: [Int]{-véges-} -> Int

Extra

Definiáld listák páros összefűzését, és ennek a műveletnek a megfordítását.

zip   :: [a] -> [b] -> [(a,b)]
unzip :: [(a, b)] -> ([a], [b])

Példa:

zip [1,2] "abc"             ↦   [(1,'a'),(2,'b')]
unzip [(1,'a'),(2,'b')] ↦ ([1,2], "abc")
import Prelude hiding (zip)

Extra

Egész számok listájában oszd el a páros számokat kettővel. A páratlan számok maradjanak változatlanul.

halves :: [Int] -> [Int]

Példa:

halves [1..10]      ↦       [1,1,3,2,5,3,7,4,9,5]