Tato stránka není aktuální - je pro verzi předmětu vyučovanou v akademickém roce 2020/2021!

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

Čtvrtek 9:00, online

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 20. 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.) – Typové třídy Semigroup, Monoid a Functor, druhy
  • 12. cvičení (20. 5. - 22. 5.) – Monády, do-notace, stavové výpočty, zadán 6. úkol
  • 13. cvičení (27. 5.) – IO monáda, monadický parser, o víkendu byl zadán 7. úkol
  • 14. cvičení (3. 6.) – Curry-Howardova korespondence, opakování

Tabulka s body

Pokud nejste v tabulce, nemám vaši přezdívku.
PřezdívkaBonusDomácí úkolyZápočťákCelkem
PrologHaskell
1234567
Alonzo Church253025801521301581OK161
Dvou-třetiňák16.752016.7553.51014201054107.5
brot252530258015213066OK171
Reni1025202570152742OK132
Miska3525242574151934OK178
Mopiru125305515213066OK122
Matus8253055152127.563.5OK126.5
bug4.52530207515213066OK145.5
Yongaron82530258015213066OK154
Čupera525285315211450OK108
Railgun122530258015213066OK158
525302580213051OK136
tlapik325295415213066123
Marky0.525305515212056111.5
Lidl32530258015213066OK149
diskretak1521234412161543117
Vojta_0243282553151221.548.5107.5
MaF625255015213066OK122
Anička3.5202848152013.7548.75OK103.75

Užitečné odkazy