Ciele
- Binárny súčtový typ
- Typ variant
- Enumeračný typ
- Typ voliteľné hodnoty (Options)
Postup
Krok 1
Binárny súčtový typ*
Úloha 1.1
- Napíšte funkciu $$getnat:Nat+Bool \to Nat,$$ ktorá:
- vráti dané prirodzené číslo, ak jej argument je vytvorený ľavou injekciou,
- ak jej argument je vytvorený pravou injekciou a jej hodnota je:
- $true$ vráti $1$,
- $false$ vráti $0$.
- Overte či je daná funkcia správne typovaná.
- Ak áno, vyhodnoťte ju pre argumenty:
- $inl\ succ\ 5$
- $inr\ iszero\ 0$
Krok 2
Typ variant
Úloha 2.1
- Zadefinujte typ $SurSystem$ ako variant pre súradnicové systemy:
- Karteziánsky systém: súradnica (dvojica) $Kart$.
- Polárny systém: súradnica (dvojica) $Pol$.
- Zadefinujte jeden term karteziánskeho systému a jeden term polárneho systému.
- Prostredníctvom termov z bodu dva, vytvorte term typu suradnicový systém z prvého bodu.
- Napíšte funkciu $$ vrat\_kart: SurSystem \to Kart$$ ktorá pre každý vstup typu $SurSystem$ vráti súradnice v karteziánskom systéme.
Poznámka
Prevod z polárnych súradníc do karteziánskych: $$ x = r*cos\ \alpha,\qquad y = r* sin \ \alpha $$
-
Overte či je funkcia $vrat\_kart$ správne typovaná.
-
Aplikujte je na termy z bodu 3.
Krok 3
Enumeračný typ
Úloha 3.1
- Definujte enumeračný typ $FarbySemafora$, ktorý bude obsahovať tri položky reprezentujúce farby semafora.
- Napíšte funkciu: $$mozem\_ist:FarbySemafora \to Bool$$
- Overte či je správne typovaná.
- Aplikujte ju na ľubovoľný term typu $FarbySemafora$.
Úloha 3.2
- Definujte enumeračný typ $Tyzden$ reprezentujúci dni v týždni.
- Napíšte funkciu $dalsiPracovnyDen$ ktorá pre ľubovoľný term typu $Tyzden$ vráti ďalší pracovný deň: $$dalsiPracovnyDen: Tyzden \to Tyzden.$$
- Overte či je správne typovaná.
- Aplikujte ju na ľubovoľný term typu $Tyzden$.
- Napíšte funkciu $jeVikend$ ktorá pre ľubovoľný term typu $Tyzden$ vráti príslušnú boolean hodnotu: $$jeVikend: Tyzden \to Bool.$$
- Overte či je správne typovaná.
- Aplikujte ju na ľubovoľný term typu $Tyzden$.