Cvičení z Neprocedurálního programování

Čtvrtek 9:00

V letním semestru 2020/2021 vedu cvičení z předmětu Neprocedurální programování [NPRG005] každý čtvrtek od 9:00 (v SU2 dá-li situace, jinak online).

Počítejte s možností, že se cvičení při lepší situaci může přepnout do prezenční formy!

Na dálková cvičení budeme používat Zoom, odkaz dostanete emailem na adresu, kterou máte nastavenou v SISu týden před začátkem semestru. Pokud odkaz nemáte, napište mi email!

Máte-li nějaký dotaz, či chcete-li si domluvit konzultaci, napište mi prosím email na adresu jiribenes+neproc@kam.mff.cuni.cz.

Podmínky zápočtu

Na získání zápočtu je potřeba:

  • zápočtový program
  • alespoň 100 bodů z úkolů, alespoň 50 bodů z každého jazyku (Prolog, Haskell)

Pozor, že na zkoušku je doporučeno mít hotový zápočet, tedy je vhodné mít všechno vyřešené včas!

Zápočtový program

Součástí požadavků na zápočet je i vytvoření zápočtového programu.

Není potřeba, aby byl program přehnaně obsáhlý – stačí ukázat, že chápete logické/funkcionální programování a dokážete jej vhodně aplikovat. Stačí řádově sto řádků hezkého a efektivního kódu.

Prolog je obzvláště vhodný na umělou inteligenci a řešení hlavolamů. Haskell je vhodný hlavně na parsery, formátovače, překladače, interpretery, programy zpracovající data a tak podobně. Dá se v něm ale naprogramovat skoro vše kromě low-level programů.

Má oblíbená témata souvisí s programovacími jazyky — parsery, malé homemade programovací jazyky, type checkery, statické analyzátory (prográmky, které řeknou něco chytrého o kódu), interpretery, maličkaté virtuální stroje a tak podobně. Sepsal jsem seznam zajímavých témat pro inspiraci zde.

Deadliny
  • Téma zápočťáku musí být odesláno emailem do neděle 16. 5. 23:59:59.
  • Hotový zápočťák musí být odevzdán emailem do neděle 13. 6. 23:59:59.

Individuálně se dá domluvit posunutí deadlinu, ale pouze před tím, než na daný deadline doopravdy dojde! Varuji ale, že může dojít k udělení zápočtu třeba i s dvou- až tří-týdenním zpožděním!

Domácí úkoly

Na konci zhruba každého druhého cvičení bude zadán domácí úkol. Bude možné získat aspoň 160 bodů za domácí úkoly celkem a aspoň 80 bodů z každého jazyku celkem. Každý úkol lze řešit dva týdny od cvičení, na kterém byl úkol zadán.

Řešení domácích úkolů mi posílejte emailem na adresu jiribenes+neproc@kam.mff.cuni.cz.

K prvnímu úkolu mi napište i přezdívku (zapsatelnou Unicodem), abych mohl na stránce zveřejnit počet získaných bodů.

Bonusové body

Za aktivitu a bonusové úkoly půjdou získat bonusové body, které se přičítají k bodům z úkolů.

Co se dělalo na cvičení

  • 1. cvičení (4. 3.) – Prolog jako databáze faktů, prohledávání do hloubky
  • 2. cvičení (11. 3.) – Složené termy, unifikace, seznamy, zadán 1. úkol
  • 3. cvičení (18. 3.) – Procvičování seznamů v Prologu, akumulátory, aritmetika
  • 4. cvičení (25. 3.) – Řezy všech druhů, třídění, higher-order funkce, zadán 2. úkol
  • 5. cvičení (1. 4.) – Rozdílové seznamy, stromy, DFS a iterativní prohlubování
  • 6. cvičení (8. 4.) – DCG pro JSON a aritmetické výrazy, lambda kalkul, zadán 3. úkol
  • 7. cvičení (15. 4.) – Úvod do Haskellu, částečná aplikace, úvod do typů
  • 8. cvičení (22. 4.) – Algebraické datové typy, seznamy, parametrické typy, zadán 4. úkol
  • 9. cvičení (29. 4.) – Líné vyhodnocování, nekonečné seznamy, foldy
  • 10. cvičení (6. 5.) – Další foldy, Maybe, typové třídy Eq, Show, Num, zadán 5. úkol
  • 11. cvičení (13. 5.)Plán: Typové třídy Semigroup, Monoid, Functor a Foldable
  • 12. cvičení (20. 5.)Plán: Aplikativní funktory a parsery, bude zadán 6. úkol
  • 13. cvičení (27. 5.)Plán: Monády, Curry-Howardova korespondence
  • 14. cvičení (3. 6.)Plán: Opakování, příprava na zkoušku, bude zadán 7. úkol

Tabulka s body

Pokud nejste v tabulce, nemám vaši přezdívku.
PřezdívkaBonusDomácí úkolyZápočťákCelkem
PrologHaskell
1234567
Alonzo Church253025801521252586166
Dvou-třetiňák16.752016.7553.510142477.5
brot15253025801515110
Reni9.2525202570151594.25
Miska15.5252425741515104.5
Mopiru1253055151571
Matus3253055151573
bug4.525302075152136115.5
Yongaron25302580151595
Čupera4.5252853151572.5
Railgun2.525302580151597.5
2.5253025802121103.5
tlapik2252954151571
Marky253055151570
Lidl25302580151595
diskretak10.521234454.5
Vojta_024228255355
MaF252550151565
Anička3.520284851.5

Užitečné odkazy