Cesta, krok 1

Zadáno v pondělí 3. 5.

K odevzdání v neděli 9. 5.

Tyto úlohy jsou pouze pro poutníky na cestě. Co dělá jaká funkce můžete rychle najít v knize, nebo na Hoogle.

  1. Napište funkci enumerate, která dostane seznam a vrátí stejně dlouhý seznam, kde každý původní prvek bude ve dvojici se svým indexem.
> enumerate ["A", "B", "C"]
[(0, "A"), (1, "B"), (2, "C")]
  1. Napište funkci getEven, která dostane seznam a vrátí pouze ty jeho prvky, které jsou na sudém indexu. Využijte list comprehension a funkci enumerate. Pokud si věříte, zkuste si najít, co v Haskellu dělá filter a použijte jej místo list comprehension.
> getEven ["A", "B", "C", "D", "E"]
["A", "C", "E"]
  1. Napište funkci vowelSum, která dostane seznam písmen a vrátí součet indexů samohlásek. Zkuste na ověření "samohláskovosti" napsat speciální funkci isVowel a nepoužívat v ní 10 ifů. Bude se hodit funkce elem.
> vowelSum ['A', 'B', 'C', 'D', 'E']
4
> vowelSum "ABCDE"
4
  1. Napište funkci filterMask, která dostane seznam nějakých prvků a stejně dlouhý seznam booleanů, a vrátí jen ty prvky, u kterých byl odpovídající boolean true.
> filterMask [1, 2, 3, 4, 5] [True, True, False, False, True]
[1, 2, 5]
  1. Napište funkci getMask, která dostane seznam nějakých prvků a funkci, která bere jeden takový prvek a vrátí True nebo False. Celá getMask by pak měla vrátit odpovídající seznam booelanů.
> getMask (/= 3) [1, 2, 3, 4, 5]
[True, True, False, True, True]

Funkcím, které vracejí booleany, se někdy říká predikáty.

  1. Napište funkci myFilter, která dostane seznam a predikát, a vrátí jen ty prvky, pro které je predikát true. Použijte své funkce z (4) a (5)
> myFilter (/= 3) [1, 2, 3, 4, 5]
[1, 2, 4, 5]
  1. Napište funkci isTriangle, která dostane tři celá čísla a má rozhodnout, zda může existovat trojúhelník s takto dlouhými stranami. Podobná funkce se někdy dává v praktické části u maturity z IVT. Chytřeji než s if-y to nejde.
> isTriangle 3 4 5
True
> isTriangle -10 4 5
False
> isTriangle 1 1 1
True
> isTriangle 3 4 5
True
> isTriangle 5 5 11
False