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

Čtvrtek 9:00, SU2

V letním semestru 2021/2022 vedu cvičení z předmětu Neprocedurální programování [NPRG005] každý čtvrtek od 9:00 v SU2.

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ň 45 bodů z každého jazyku (Prolog, Haskell)

Pozor, že pro přihlášení ke zkoušce 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 15. 5. 23:59:59.
  • Hotový zápočťák musí být odevzdán emailem do neděle 26. 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 z ReCodExu 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í (17. 2.) – Prolog jako databáze faktů, prohledávání do hloubky
  • 2. cvičení (24. 2.) – Složené termy, unifikace, seznamy; byl zadán 1. úkol
  • 3. cvičení (3. 3.) – Procvičování seznamů, akumulátory, aritmetika
  • 4. cvičení (10. 3.) – Řezy, třídění, higher-order funkce; byl zadán 2. úkol
  • 5. cvičení (17. 3.) – Rozdílové seznamy, stromy, DFS a iterativní prohlubování
  • 6. cvičení (24. 3.) – Parsování pomocí DCG, lambda kalkul; byl zadán 3.úkol
  • 7. cvičení (31. 3.) – Úvod do Haskellu, částečná aplikace, základní typy, součtové typy
  • 8. cvičení (7. 4.) – Algebraické datové typy, parametrické typy; byl zadán 4. úkol
  • 9. cvičení (14. 4.) – Líné vyhodnocování, nekonečné seznamy, list comprehension
  • 10. cvičení (21. 4.) – Maybe, foldr, foldl, eliminace typů; byl zadán 5. úkol
  • 11. cvičení (28. 4.) – Tečka a dolar, typové třídy Eq, Ord, Show, Semigroup, Monoid
  • 12. cvičení (5. 5.) – Funktory, monády, do-notace; byl zadán 6. úkol
  • 13. cvičení (12. 5.) – Stavové výpočty, vstup a výstup, monadický parser; byl zadán 7. úkol
  • 14. cvičení (19. 5.) – Curry-Howardova korespondence, hromadné 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 Church213227801821272187167
Dvou-třetiňák1421.51853.51214181458111.5
Mohy4203252359
Dia3212546182111501100
ᴇ ᴄᴏʀᴘ8.2521211212344.25
rose12.5213222751821266513OK165.5
Kyberšutr5213220731820.752563.754145.75
Ender1021325318212721875155
tlapik121322780182127665152
invoker0.5213253182139193.5
pheeck13.521322780182127667166.5
sillyboyblue0.52132531827453101.5
Richard0.52132531720.51249.51104
hynky6213152182127664128
FM12132531820.51149.51104.5
lul0.752130.52778.5182127661146.25
woq821325318211756117
Procyon1.521211818141.5
Saril7.521322376182126651149.5
oisho213253182139193
dz0.252132531820.51755.51109.75
krevetka213152171936391
qwer19122758181876

Užitečné odkazy