2. Haskelli kodutöö
Lahenda järgmised ülesanded Haskelli moodulisse Kt2.
Moodle'ist leiad ka lahendusfaili malli Kt2.hs.
Selle kodutöö ülesanded tuleb lahendada lihtrekursiooniga, mitte standardfunktsioone kasutades.
Funktsioonide null, head, tail, fst ja snd asemel kasuta mustrisobitust.
1. ülesanne (0.4p)
Tagastab paaride listi esimesed elemendid (samas järjekorras).
Näiteks:
esimesed [] ==> [] esimesed [(2, 3), (6, 4), (9, 9)] ==> [2, 6, 9]
esimesed :: [(a, b)] -> [a] esimesed ps = undefined
2. ülesanne (0.4p)
Tagastab True, kui arv leidub listis, muidu False.
Näiteks:
otsi 3 [1, 2, 3, 4, 5, 6] ==> True otsi 8 [1, 2, 3, 4, 5, 6] ==> False
otsi :: Integer -> [Integer] -> Bool otsi n xs = undefined
3. ülesanne (0.4p)
Eemaldab listi viimase elemendi.
Näiteks:
dropLast [] ==> [] dropLast [1, 2, 3] ==> [1, 2] dropLast [3, 2, 1, 0] ==> [3, 2, 1]
dropLast :: [a] -> [a] dropLast xs = undefined
4. ülesanne (0.4p)
Lisab tähe sõnesse. Kusjuures nulli või negatiivse indeksiga pannakse täht algusse, suurema indeksiga, kui sõne pikkus, lõppu.
Näiteks:
lisa (-1) 'a' "xyz" ==> "axyz" lisa 1 'a' "xyz" ==> "xayz" lisa 3 'a' "xyz" ==> "xyza" lisa 2 'a' "xyz" ==> "xyaz" lisa 400 'a' "xyz" ==> "xyza"
lisa :: Int -> Char -> String -> String lisa i x ys = undefined
5. ülesanne (0.4p)
Väärtustab polünoomi kohal x. Iga listi element (a, n) tähistab polynoomi liidetavat a*x^n.
Näiteks: [(4.0,2),(1.0,1),(30.0,0)] tähendab 4*x^2 + x + 30 ja
arvuta [(4.0, 2), (1.0, 1), (30.0, 0)] 5 ==> 135.0 arvuta [(4.0, 2), (1.0, 1), (30.0, 0)] 2 ==> 48.0 arvuta [] 5 ==> 0
arvuta :: [(Double, Int)] -> Double -> Double arvuta ps x = undefined
Selles ülesandes kasuta astendamiseks Haskellisse sisseehitatud operaatorit ^.