Funkcionális programozás gyakorlat

5. feladatsor

Beadandó feladat

Add meg egy lista farkait, és azt, hogy hány páratlan szám szerepel benne.

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

Példa:

tailOdds [1,2,3]    ↦       [(2, [1,2,3]),
(1, [2,3]),
(1, [3]),
(0, [])]

Feladat

Definiáld a logikai és, vagy, tagadás éd kizáró vagy operátorokat (&&).

land :: Bool -> Bool -> Bool
lor :: Bool -> Bool -> Bool
lnot :: Bool -> Bool
lxor :: Bool -> Bool -> Bool

Feladat

Írj olyan függvényt, amely a kisbetűkből nagybetűket csinál és fordítva. A többi karakter ne változzon meg.

A megoldáshoz szükség lesz a Char modul toUpper, toLower, isUpper és isLower függvényeire.

toggleCase :: Char -> Char

Extra

Nagybetűsítsd a függvény első paraméterének első karakterét, ha az latin kisbetű. Minden más jel maradjon változatlan.

toUpperFirst :: String -> String

Feladat

Készíts olyan függvényt, amely egy elemet szúr be egy rendezett listába.

Az (Ord a) típusosztály jelentése: az a típus elemeire használhatóak az összehasonlító műveletek, pl. a < és a >.

ins :: (Ord a) => a -> [a] -> [a]

Extra

Írj gyorshatványozó függvényt.

toThe :: Integer -> Integer -> Integer

A hatványozásnál használd ki a második paraméter bináris felbontását:

3 ** 113 ** (1 + 2 + 8) ↦ (3**1) * (3**2) * (3**8)

Extra

Készíts olyan függvényt, amely egy együtthatóival megadott polinomot értékel ki egy megadott helyen.

polynomial :: [Int] -> Int -> Int
[7,2,1,3] `polynomial` 4  ↦ (7 * 4**3) + (2 * 4**2) + (1 * 4) + 3
[7,2,1,3] `polynomial` 4 ↦ ((7 * 4 + 2) * 4 + 1) * 4 + 3

Feladat

Állapítsd meg, hogy egy adott érték szerepel-e egy listában.

elem :: (Eq a) => a -> [a] -> Bool

Az (Eq a) típusosztály jelentése: az a típus elemeire használható az egyenlőségvizsgálat, azaz az és a /=.

Extra

Valósítsd meg a beszúrásos rendezést függvénnyel.

insertSort :: (Ord a) => [a] -> [a]

Extra

Fésüld össze két lista elemeit egy új listába.

mergeWith :: [a] -> [a] -> [a]

Példa:

[1,2,3] `mergeWith` [4,5,6]  ↦  [1,4,2,5,3,6]
[] `mergeWith` [4,5,6] ↦ [4,5,6]

Extra

Darabold fel a kapott listát egyforma hosszú részekre.

runs :: Int -> [a] -> [[a]]
runs 3 [1..10]      ↦     [[1..3],[4..6],[7..9],[10]]

Extra

Darabold fel a kapott listát egyforma hosszú részekre. Minden darab méretét külön kapjuk meg.

runsBy :: [Int] -> [a] -> [[a]]

Extra

Definiálj egy olyan függvényt, amely egy lista minden n-edik elemét veszi!

every :: Int -> [a] -> [a]
every 0 "Hello World"""
every 2 "Hello World""HloWrd"
every 3 "Hello World""HlWl"

Extra

Készíts olyan függvényt, amely visszaadja egy nemnegatív egész szám kettes számrendszerbeli számjegyeit fordított sorrendben!

toBin :: Integer -> [Integer]
toBin  0  ↦  []
toBin 1 ↦ [1]
toBin 2 ↦ [0,1]
toBin 10 ↦ [0,1,0,1]