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.
Napište definici typu
Tile
(políčko), která bude odpovídat možnostem popsaným výše.Napište, jak by mohl vypadat typ
GameMap
(doporučuji použít váš typTile
). Potřebujete k tomu vůbec použítdata
?Napište definice typů
Player
aMonster
. 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)
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
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ů)
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č?
Kolik různých hodnot je v typu
Boolean
? Tj. kdybychom měli nějakou proměnnoux :: Boolean = ...
, kolik různých věcí bychom mohli doplnit místo...
, aby ten kód byl platný?Kolik různých hodnot je (teoreticky) v typu
Number
?Kolik různých hodnot je v typu
OrganismState
, který je definovaný níže?data OrganismState: | Living | Dying | Dead | Multiplying end
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)