Dalkeresés

Használható segédanyagok: Haskell könyvtárainak dokumentációja, (lokális!) Hoogle, a tárgy honlapja és a BE-AD rendszerbe feltöltött beadandók. Ha bármilyen kérdés, észrevétel felmerül, azt a felügyelőknek kell jelezni, NEM a diáktársaknak!

Tekintve, hogy a tesztesetek, bár odafigyelés mellett íródnak, nem fedik le minden esetben a függvény teljes működését, határozottan javasolt még külön próbálgatni a megoldásokat beadás előtt, vagy megkérdezni a felügyelőket!

Részpontszámokat csak az elégséges szint elérése után lehet kapni!

A feladat összefoglaló leírása

Zenehallgatás közben az egyik percben hallottunk egy érdekes dallamot, ezért szeretnénk megtalálni, hogy az adott album melyik dalához tartozik. Ehhez az album egyes számait felírjuk egy listában és készítünk egy egyszerű programot ahhoz, hogy megtaláljuk a keresett dalt.

Az idő ábrázolása (1 pont)

Adjuk meg a feladatban használt Time típust, amellyel a későbbiekben az aktuális pozíciót, valamint a dalok hosszait írjuk le!


Test>
Test>

Összeadás az időre (1 pont)

Definiáljuk az összeadás műveletét a Time típusra!

addTime :: Time -> Time -> Time

Test>
(0, 28) :: Time
Test>
(1, 15) :: Time
Test>
(28, 58) :: Time
Test>
(28, 8) :: Time

A dalok ábrázolása (1 pont)

Adjuk meg az egyes dalok adatait ábrázoló Track típust! Segítségével a következő tulajdonságokat tároljuk: sorszám az albumon belül, cím, hossz.


Test>
Test>

Egy dal hossza (1 pont)

Készítsük el azt a függvényt, amely megadja, hogy milyen időtartamú egy dal!

trackLength :: Track -> Time

Test>
(6, 49) :: Time

Keresés adott tulajdonság alapján (5 pont)

Írjunk egy olyan függvényt, amely rendezett párok listájában megkeresi az első olyat, ahol az adott tulajdonság teljesül a pár első elemére iteratívan alkalmazott művelet eredményére! Ha nem találunk ilyen elemet, akkor Nothing lesz az eredmény.

search :: (a -> Bool) -> (a -> a -> a) -> [(a,b)] -> Maybe (a,b)

Test>
Nothing :: Maybe (Integer, ())
Test>
Nothing :: Maybe (Integer, Char)
Test>
Just (9, 'C') :: Maybe (Integer, Char)
Test>
Just (3, 'B') :: Maybe (Integer, Char)

Dal keresése időbeli pozíció alapján (3 pont)

Az előbbi függvények felhasználásával végül adjuk meg azt a függvényt, amellyel meg tudjuk keresni dalok egy listájában az adott időpozíciónál levőt!

at :: [Track] -> Time -> Maybe Track

Test>
Nothing :: Maybe Track
Test>
Just (2, "Reaping", (7, 5)) :: Maybe Track
Test>
Nothing :: Maybe Track

Pontozás (elmélet + gyakorlat)