e-x-a.org » NPRG005 Neprocedurální programování 2016/17

Informační stránka o cvičení z neprocedurálního programování.

  • ČAS: LS 2016/17, každé úterý ve 14:00 v S8, MS MFF
  • KONTAKT: exa.exa@gmail.com, do předmětu napište něco jako [NEPROC], ať se odlišíte od šedé mezivrstvy skorospamu.

Materiály ke čtení

Kde sehnat vývojové prostředí?

Oficiální seznam.

Na cvičeních budu používat:

  • SWI prolog na příklady, GNU prolog na některé ošklivé triky
  • Racket scheme
  • standardní GHC/GHCi

Za co bude zápočet?

Za splnění následujících podmínek:

  • splnit pár domácích úkolů (50% z prologu, 50% z haskellu, 1 bonus ze scheme)
  • na cvičeních občas vypadat aktivně zúčastněně (nedostatek aktivitních bodů bude možné nahradit nadprodukcí bodů za domácí úkoly)
  • vyrobit zápočťák

Na zkoušku je potřeba zápočet, proto je fajn mít všechno vyřešené do konce května.

Pokud v haskellu i prologu už programovat umíte a myslíte si, že požadavky pro vás budou triviální, dejte mi vědět mailem nebo na první hodině, ať se zbytečně nenudíme docházkou.

Zápočťáky

Narozdíl od zápočťáků z “tradičních” programování není potřeba, aby zápočtový program byl nějak extrémně obsáhlý, ale je nutné jím demonstrovat, že umíte správně zneužít výhody neprocedurálního přístupu. Téma je libovolné (kromě úplně triviálních úloh dostupných v desítkách kopií na celém internetu), ale doporučuje se neodbíhat od témat, pro která byly neprocedurální jazyky stvořeny:

  • v prologu je vhodné programovat umělé, logicky smýšlející inteligence a řešítka problémů s velkým stupněm volnosti
  • v haskellu je vhodné psát cokoliv co využije jednoduché zpracování nepravidelných datových struktur a/nebo lazy vyhodnocování.
  • moje velice oblíbená skupina problémů: parsery, miniaturní kompilátory, typecheckery, odvozovače informací o kódu, maličké interpretery, pidi virtuální stroje, transpilery, přeformátovače, ...
  • dost nápadů na témata můžete najít u Jána Hrice a Rudolfa Kryla anebo taky třeba tady a obecně i jinde a dost na googlu.
Termíny
  • Domluvení a odsouhlasení tématu: 31. 3. 2017 23:59:59
  • Odevzdání včetně připomínkování nebo prezentace: 31. 5. 2017 23:59:59 (odevzdávání a prezentacím zápočťáků věnujeme poslední cvičení)
Mezivýsledky
  • Jirka Drahovzal – 1
  • Peter Kovács – 1
  • Pavel Laitoch –
  • Pavel Madaj – 1
  • Karel Maděra – 1
  • Pavel Madaj –
  • Pavel Marek –
  • Pavel Myšička – 1

Průběh cvičení

21. 2. 2017

Úvod, předběžnosti. K čemu je procedurální kód fajn a k čemu je podivný. Knowledge databáze v prologu.

Na hodině se nám skoro povedlo vyrobit vyhodnocovač logických formulí: prolog ohodnotí program vyhodnot(nebo(a(ano,ne),ano), X). dosazením X=ano. Zdroják z hodiny zde .

DÚ:

  1. napište mi mail (viz nahoře), ať na vás mám kontakt.
  2. na příště se zamyslete:
    • jaký je rozdíl mezi negativní odpovědí na vyhodnot(a(ano,neg(kocka)),X). a na vyhodnot(a(ano,neg(ano)), X).
    • se proč se zacyklí dotaz vyhodnot(X,kocka).
    • jak donutit prolog, aby vyhodnot(F,ne). postupně vypsalo všechny formule, které se vyhodnotí na ne, a nezacyklil se na neg(neg(neg(neg(.....)))).

28. 2. 2017

Lepší generování/vyhodnocování logických formulí, aritmetika, seznamy.

Bonusy

Prolog co jsme napsali na hodinách.