Súčtové typy

Ciele

  1. Binárny súčtový typ
  2. Typ variant
  3. Enumeračný typ
  4. Typ voliteľné hodnoty (Options)

Postup

Krok 1

Binárny súčtový typ*

Úloha 1.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$.
  1. Overte či je daná funkcia správne typovaná.
  2. Ak áno, vyhodnoťte ju pre argumenty:
    1. $inl\ succ\ 5$
    2. $inr\ iszero\ 0$

Krok 2

Typ variant

Úloha 2.1

  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$.
  1. Zadefinujte jeden term karteziánskeho systému a jeden term polárneho systému.
  2. Prostredníctvom termov z bodu dva, vytvorte term typu suradnicový systém z prvého bodu.
  3. 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 $$

  1. Overte či je funkcia $vrat\_kart$ správne typovaná.

  2. Aplikujte je na termy z bodu 3.

Krok 3

Enumeračný typ

Úloha 3.1

  1. Definujte enumeračný typ $FarbySemafora$, ktorý bude obsahovať tri položky reprezentujúce farby semafora.
  2. 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

  1. Definujte enumeračný typ $Tyzden$ reprezentujúci dni v týždni.
  2. 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$.
  1. 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$.