IB015 Neimperativní programování (podzim 2018)

Organizace předmětu

Přednášky

  • V podzimním semestru 2018 se přednášky konají v úterý 12:00 – 13:50 v D1.
  • Účast na přednáškách není povinná (avšak je silně doporučovaná, na cvičeních se nesetkáte se vším).

Hodnocení a povinnosti během semestru

Pro úspěšné absolvování předmětu je potřeba splnit následující podmínky:
  1. Získat alespoň 4 body z domácích úloh v Haskellu a zároveň alespoň 2 body z domácích úloh v Prologu.
    • Celkem je možné nasbírat 10 bodů za domácí úlohy v Haskellu a 5 bodů za úlohy v Prologu.
    • Domácí úlohy jsou zveřejňovány každý týden. Studenti si musí sami hlídat termíny odevzdání jednotlivých úkolů.
  2. Úspěšně absolvovat zápočtovou písemku na konci semestru.
    • Zápočtová písemka se skládá z 5 příkladů testujících nutné minimum znalostí, které musí získat úspěšný absolvent předmětu. Například: Naprogramujte tuto rekurzivní funkci na seznamech (Haskell), otypujte tento výraz (Haskell), vyhodnoťte tento výpočet (Haskell), napište jednoduchý predikát pracující se seznamy (Prolog), nakreslete výpočet tohoto dotazu (Prolog), …
    • Pro úspěšné absolvování zápočtové písemky je potřebné získat 4,5 z 5 bodů, tj. toleruje se nejvýše jedna nezávažná chyba.
    • Termín zápočtové písemky je poslední týden semestru. Neúspěšní studenti mají jednu možnost opravy začátkem ledna. Student, který ani v opravném termínu nevypracuje zápočtovou písemku na dostatečný počet bodů, získá známku X.
  3. Získat minimálně 10 bodů v součtu za závěrečnou zkoušku a domácí úlohy.
    • Závěrečná zkouška testuje schopnost vytvořit netriviální program v Haskellu a Prologu.
    • Závěrečná zkouška je písemná na papír.
    • Závěrečná zkouška je bodována v rozsahu 0-50 bodů.
    • Body získané za závěrečnou zkoušku a domácí úlohy se sečtou a podle počtu získaných bodů bude uděleno následující hodnocení:
      • E za [10,20) bodů
      • D za [20,30) bodů
      • C za [30,40) bodů
      • B za [40,50) bodů
      • A za [50,65] bodů
    • Je tedy zřejmé, že studenti, jež splní podmínky 1 a 2 a zároveň získají alespoň 10 bodů z domácích úloh, mohou být úspěšně hodnoceni stupněm E bez nutnosti účastnit se závěrečné zkoušky.
Vzorové zadání a bližší informace k podobě závěrečné zkoušky budou zveřejněny později.
 


 

Cvičení

  • Cvičení nejsou povinná, jsou však silně doporučená – naším cílem je, abyste si mohli procvičit látku bez toho, abyste se vším museli prokousat sami.
  • Noste si na cvičení i pero a papír – některé úlohy se výrazně lépe řeší bez počítače, bude se vám hodit i pro kreslení stromů a pod.
  • Prosíme vás, abyste chodili primárně na cvičení, která máte zapsaná. Nahradit si občas cvičení jinde samozřejmě není problém, dejte to však dotyčnému cvičícímu dopředu vědět (ideálně emailem).
  • Všechna cvičení jsou rozvrhována do učeben s počítači a vlastní notebook se nepředpokládá. Jestli chcete používat počítač vlastní, klidně můžete, nachystejte si však na něm ještě před prvním cvičením (!) vše potřebné (viz další sekci).
  • Nemáte-li zájem navštěvovat cvičení, přihlaste se do skupiny 09, abyste nezabírali jiným studentům místo ve standardních skupinách. Skupina 09 se nerozvrhuje, studenti v této skupině se neúčastní žádných cvičení. Ke konzultacím s vyučujícími lze využít diskusní fórum.

Používaný software

Všechny používané nástroje jsou již nainstalovány v učebně. Jestli chcete na cvičení používat vlastní notebook, zprovozněte si prosím níže uvedené nástroje ještě před prvním cvičením.
Případné problémy s instalací můžete psát do diskusního fóra (na cvičení na řešení problémů s instalací nebude žádný čas).

Haskell

Standardem pro tento semestr je překladač Glasgow Haskell Compiler (GHC) verze 8.0 nebo vyšší (doporučujeme instalovat nejnovější).
  • Linux: Pokud je ghc verze nejméně 7.10 k dispozici v repozitářích vaší distribuce, instalujte přímo z repozitáře.
  • Windows, Mac OS X: Stáhněte GHC ze stránek výrobce.
V případě, že používáte GHC na studentském serveru aisa.fi.muni.cz, standardně se spouští stará verze 7.6.3. Novou verzi povolíte příkazem module add ghc. Modul je nutné přidávat při každém přihlášení, příp. zanést do vašeho .bashrc.

Prolog

Nástroje pro jazyk Prolog budou potřeba až v druhé polovině semestru
Standardem pro jazyk prolog bude překladač SWI Prolog verze 7.0 nebo vyšší (doporučujeme instalovat nejnovější, ale jestli máte v repozitáři své distribuce alespoň 7.0, klidně nainstalujte verzi z repozitáře).
  • Linux: Pokud je swipl k dispozici v repozitářích vaší distribuce, instalujte přímo z repozitáře.
  • Windows, Mac OS X: Stáhněte SWI Prolog ze stránek výrobce.

Domácí úlohy

  • Každý týden bude zadán domácí úkol, za který bude možné získat 1-2 body.
  • Domácí úkoly vypracovávejte samostatně. Spolupráce vícero lidí je zakázána. Viz disciplinární řád FI MU.
  • Pokud přebíráte v řešení kód z jiného zdroje (internetový tutoriál, fórum, kniha, …), nezapomeňte příslušnou část kódu označit a uvést zdroj (vydáváte-li ji za svou vlastní práci, dopouštíte se plagiátorství a tím se vystavujete riziku disciplinárního stíhání).
  • Většinou budou úlohy realizované formou odpovědníku, třikrát v průběhu semestru bude zadána větší úloha k odevzdání přes odpovědník nebo odevzdávárnu. V obou případech bude odkazován z interaktivní osnovy.
  • Ve všech případech bude úloha/odpovědník dostupný hned v úterý po přednášce a čas na vypracování bude do středy následujícího týdne (tj. 9 dní).
  • Při vypracovávání domácích úkolů můžete používat interpret jazyka Haskell/Prolog.
  • Odpovědníky je možné zodpovědět pouze jednou (není-li u konkrétního úkolu uvedeno jinak), s časovým limitem 2 hodiny, a prohlídka odpovědníků je možná až po ukončení období pro odevzdávání. Spadne-li vám připojení v průběhu odpovídání, odpovědník je možné otevírat znovu, dokud neuplynou 2 hodiny od prvního otevření.
  • Odpovědníky budou mít více podúloh, každá bude hodnocena samostatně desetinami bodu.

Úlohy typu "naprogramujte funkci"

  • 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í v řádu sekund. I přes kontrolu syntaxe je však silně doporučeno řešení vyzkoušet v interpretru, testy běží až po odevzdání.
  • Pokud není v otázce řečeno jinak, můžete si definovat libovolně mnoho pomocných funkcí. Není-li uvedeno jinak, předpokládejte načtenou standardní knihovnu, vyhněte se proto jménům funkcí, která by vytvářela kolize (v případě pochybností si to odzkoušejte v interpretru, nebo kontrolou syntaxe).
  • 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ě sekundy na úlohu) a pokud se sejde více úloh v jeden okamžik, tak se úlohy vyhodnocují postupně.
  • Vyhodnocování úloh je časově omezené. Limity by měly být nastaveny tak aby nevyžadovaly optimální řešení, ale snažte se aby vaše řešení nebylo příliš neoptimální. Například pokud jde úlohu vyřešit snadno v lineárním čase a vaše řešení bude v exponenciálním čase a kvůli tomu neprojde přes timeout, nemusíte dostat body.
  • 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.