IB016 Seminář z funkcionálního programování
RNDr. Martin Ukrop, Ph.D.
IB016 Seminář z funkcionálního programování
Chapter contains:
1
Study text
Teacher recommends to study from 22/2/2016 to 13/3/2016.
Chapter contains:
3
ROPOT
17
PDF
18
Study Materials
1
Study text
6
Web
Teacher recommends to study from 22/2/2016 to 22/5/2016.
Chapter contains:
1
Homework Vault
2
Study Materials
1
Study text
1
Web
Teacher recommends to study from 29/2/2016 to 13/3/2016.
Chapter contains:
1
Homework Vault
2
Study Materials
1
Study text
1
Web
Teacher recommends to study from 14/3/2016 to 27/3/2016.
Chapter contains:
1
Homework Vault
2
Study Materials
1
Study text
1
Web
Teacher recommends to study from 28/3/2016 to 10/4/2016.
Chapter contains:
1
Homework Vault
2
Study Materials
1
Study text
1
Web
Teacher recommends to study from 18/4/2016 to 1/5/2016.
Chapter contains:
1
Homework Vault
2
Study Materials
1
Study text
1
Web
Teacher recommends to study from 2/5/2016 to 22/5/2016.

Organizace a pravidla absolvování

Organizace kurzu

Tento kurz se zabývá programováním ve funkcionálním jazyce Haskell, především z praktického hlediska. Kurz původně vznikl na podnět Pavla Dvořáka a pořád je z velké části založen na něm připravených materiálech. Za inspiraci a materiály z předešlých let děkujeme také Matejovi Kollárovi a Petrovi Pilařovi.

Kurz je organizován jako série dvouhodinových cvičení s týdenní periodicitou. Cvičení nejsou povinná. Je na zvážení každého, zda dokáže splnit podmínky absolvování kurzu. Očekáváme ale, že si kurz zapíšou zejména studenti se zájmem o probíranou problematiku ;-).

Podmínky úspěšného absolvování kurzu

  • V průběhu semestru bude zadáno pět domácích úloh, za které lze získat celkem 100 bodů. Pro udělení zápočtu je nutno dosáhnout alespoň 50 bodů.
  • Samostatně vypracovanou úlohu je potřeba vždy odevzdat do dvou týdnů od zadání úlohy do příslušné odevzdávárny v informačním systému. V případě, že úkol do odevzdávárny nestihnete nahrát včas, můžete ho poslat cvičícímu e-mailem. Toto pozdní odevzdání bude ovšem penalizováno −5 body za každý den zpoždění. (Za úlohu nelze získat záporný počet bodů.)
  • Vypracované úlohy budou hodnoceny nejenom z pohledu funkčnosti, ale i z pohledu implementační elegance – za velmi pěkné řešení můžete obdržet i nějaký bod navíc, nečitelné a těžkopádné řešení vás může stát i polovinu bodů. Taktéž například exponenciální implementace funkce implementovatelné lineárně nebude hodnocena kladně, snažte se tedy řešit problémy i efektivně.
  • Kód bude muset splňovat požadavky na styl jenž bude ověřován programem HLint. Za nesplnění tohoto požadavku bude počet bodů upraven funkcí flip div 4 . (3*). Dále bude zdrojový kód kompilovaný s přepínačem -Wall. Ani zde by neměly být vypsané žádné další varování. Kód musí být kompilovatelný na aisa.fi.muni.cz (ghc 7.8.4 ze stejnojmenného modulu) (jinak bude počet bodů upraven funkcí const 0).
  • Jak rozchodit HLint na aise, nastavit pravidla pro kontrolu a další technické záležitosti najdete v tomto dokumentu (bude přidáno se zadáním prvního úkolu).

Pokyny k nepovinným odpovědníkům

V kurzu se vyskytnou i nepovinné odpovědníky na procvičení probírané látky. Součástí odpovědníků budou i úlohy typu naprogramujte funkci, v těchto případech se jedná o úlohy automaticky opravované na shodné chování se vzorovým řešením.

  • Textové pole v ISu podporuje syntaktickou kontrolu (vyžaduje javascript), pod odpovídacím polem byste měli vidět tlačítko pro kontrolu syntaxe. Kontrola syntaxe kontaktuje externí server, a tedy může mít zpoždění. I přes kontrolu syntaxe je však silně doporučeno řešení vyzkoušet v interpretru, testy běží až po odevzdání.
  • V případě špatné odpovědi se v prohlídce odpovědníku dozvíte, co bylo špatně (nešlo zkompilovat, typová chyba, liší se výstup…). Pokud se jedná o výstup rozdílný od vzorového řešení, naleznete ve výstupu nejprve několik řádků s konkrétními vstupy a na posledním řádku pak konkrétní (lišící se) výstupy. Někdy však netestujeme přímo vaši funkci, ale používáme pomocnou funkci, proto výstupy nemusí úplně sedět; budeme se však snažit zachovat čitelnost.
  • Mějte, prosím, trpělivost s ISem, vyhodnocování úloh není okamžité (řádově sekunda na úlohu) a pokud se sejde více úloh v jeden okamžik, tak se úlohy vyhodnocují postupně.
  • Pokud narazíte na nějaký problém s touto službou – například když u odpovědi máte, že server neodpovídá, nebo si myslíte, že jsme neuznali správné řešení (které vám v interpretru funguje!), napište do diskusního fóra nebo kontaktujte správce externí služby, kterým je Vladimír Štill.

Materiály z cvičení

Upozornění: Slidy budeme postupně aktualizovat, stáhněte si před cvičením aktuální verzi.

Cvičení 1

Cvičení 2

Cvičení 3

Cvičení 4

Cvičení 5

Cvičení 6

Cvičení 7

Cvičení 8

Cvičení 9

Cvičení 10

Cvičení 11

Cvičení 12

Závěr semestru

Dodatečné materály

ST výpočty se stavy

cvičení z roku 2015, nebude přednášeno
Error: The referenced object does not exist or you do not have the right to read.
https://is.muni.cz/el/1433/jaro2016/IB016/um/extras/lazy-functional-state-threads.pdf

Domácí úkol 1

Popis: Vaším úkolem je implementovat datový typ reprezentující matice a několik funkcí pracujicích s maticemi (...). Zadání je formou dokumentace požadovaných funkcí vygenerované systémem Haddock.

Termín odevzdání: 13. 3. 2016 23:59

Formát odevzdání: Odevzdejte jeden soubor Matrices.hs, který vznikne doimplementováním požadovaných funkcí do poskytnuté kostry modulu.

Zadání

Vzorové řešení

Domácí úkol 2

Popis: Vaším úkolem je naprogramovat priroritní frontu založenou na haldě. Zadání je formou dokumentace požadovaných funkcí vygenerované systémem Haddock.

Termín odevzdání: 28. 3. 2016 23:59

Formát odevzdání: Odevzdejte jeden soubor PriorityQueue.hs, který vznikne doimplementováním požadovaných funkcí do poskytnuté kostry modulu.

Zadání

Vzorové řešení

Domácí úkol 3

Popis: Vaším úkolem je implementovat zjednodušenou verzi linuxového prográmku Tree. Vytvořte ucelený, samostatný, po skompilovaní spustitelný modul. Zadání je formou dokumentace požadovaného chování vygenerované systémem Haddock.

Termín odevzdání: 17. 4. 2016 23:59

Formát odevzdání: Odevzdejte jeden soubor Tree.hs, který vznikne doimplementováním požadovaných funkcí do poskytnuté kostry modulu. Dokumentace interních funkcí je velice vítána.

Zadání

Vzorové řešení

Domácí úkol 4

Popis: Vaším úkolem je implementovat několik funkcí do programu pro komunikaci se síťovým API služby jdem.cz a následné zpracování odpovědi z formátu JSON za použití vhodné knihovny. Zadání je formou dokumentace požadovaného chování vygenerované systémem Haddock.

Termín odevzdání: 1. 5. 2016 23:59

Formát odevzdání: Odevzdejte jeden soubor jdemcz.hs, který vznikne doimplementováním požadovaných funkcí do poskytnuté kostry modulu. Dokumentace interních funkcí je velice vítána.

Zadání

Vzorové řešení

Error: The referenced object does not exist or you do not have the right to read.
https://is.muni.cz/el/1433/jaro2016/IB016/um/homeworks/hw04/jdemcz-solution.hs

Domácí úkol 5

Popis: Vaším úkolem je implementovat kompletní parser formátu INI podle zadané specifikace. Použijte kombinátorovou parsovací knihovnu Parsec. Zadání je formou dokumentace požadovaného chování vygenerované systémem Haddock.

Termín odevzdání: 22. 5. 2016 23:59

Formát odevzdání: Odevzdejte jeden soubor Ini.hs, který vznikne doimplementováním požadovaných funkcí do poskytnuté kostry modulu. Dokumentace interních funkcí je velice vítána.

Zadání

Vzorové řešení

Error: The referenced object does not exist or you do not have the right to read.
https://is.muni.cz/el/1433/jaro2016/IB016/um/homeworks/hw05/Ini-solution.hs