Data!

Zadáno v pátek 6. 11.

K odevzdání v pondělí 9. 11.

Získat můžete až 10 bodů

Tento úkol se z větší části skládá z teoretických otázek. Odpověď na každou z otázek mi prosím napište i s otázkou samotnou do nějakého textového souboru, který označíte (již tradičně) u8_příjmení.arr.

Otázky

Píšete hru, ve které se monstrum pohybuje na konečné 2D mapě a snaží se dohonit a zabít hráče. Samotná mapa se skládá ze čtvercových políček, které jsou vyplněny neprůchodnou zdí, neprůchodnou vodou, nebo průchozí trávou.

  1. Napište definici typu Tile (políčko), která bude odpovídat možnostem popsaným výše.

  2. Napište, jak by mohl vypadat typ GameMap (doporučuji použít váš typ Tile). Potřebujete k tomu vůbec použít data?

  3. Napište definice typů Player a Monster. Tyto typy by v sobě měly mít alespoň tolik informací, abychom věděli, kde na mapě máme monstrum a hráče nakreslit.

(konec úkolů týkajících se hry)

  1. Doplňte do kódu níže pravděpodobnou definici pyretovského typu List. Do případných struktuních definicí nezapomeňte dopsat typy.

    data List:
      ...
    end
    
  2. Napište definici typu NonEmptyList, který se od normálního seznamu liší tím, že má vždy alespoň jeden prvek. Inspirujte se definicí normálního listu, kterou jste doplnili výše.

(konec úkolů týkajících se seznamů)

  1. Kondicionálním typům se častěji říká "sum types" (součtové typy), strukturním typům zase "product types" (násobné typy). Dokázali byste odhadnout, proč?

  2. Kolik různých hodnot je v typu Boolean? Tj. kdybychom měli nějakou proměnnou x :: Boolean = ..., kolik různých věcí bychom mohli doplnit místo ..., aby ten kód byl platný?

  3. Kolik různých hodnot je (teoreticky) v typu Number?

  4. Kolik různých hodnot je v typu OrganismState, který je definovaný níže?

    data OrganismState:
       | Living
       | Dying
       | Dead
       | Multiplying
    end
    
  5. Kolik různých hodnot je v typu EscherichiaColi, který je definovaný níže?

    data EscherichiaColi:
      | ecoli(state :: OrganismState, is-eating :: Boolean)
    end
    

    Při hledání všech různých hodnot nezapomeňte vzít v úvahu, zdali ecoli(Living, true) == ecoli(Dying, true).

(konec úkolu o velikosti typů. vraťte se k otázce 6 a zkuste ji znovu zodpovědět)