Department of Information and Computing Sciences

Departement Informatica Onderwijs
Bachelor Informatica Informatiekunde Kunstmatige intelligentie Master Computing Science Game&Media Technology Artifical Intelligence Human Computer Interaction Business Informatics

Onderwijs Informatica en Informatiekunde

Vak-informatie Informatica en Informatiekunde

Functioneel programmeren

Te lang geleden voor docent- en roosterinformatie
Website:website met extra informatie
Inhoud:In het vak Imperatief Programmeren of Game Programmeren hebben jullie kennis gemaakt met de taal C#. In die taal bestaat een programma uit opdrachten (statements), georganiseerd in klassen. Een algoritme wordt hier gemodelleerd door een stappenplan, waarbij de programmeur de opdrachten in de juiste volgorde zet. Die vaste, dwingende volgorde is de reden dat we zo'n taal imperatief noemen.

Functionele talen zijn declaratief: je vertelt als programmeur meer wat je wilt uitrekenen, dan hoe. Logische programmeertalen gaan hierin nog wat verder dan functionele talen; wij beperken ons tot functionele talen.

Onderwerpen die aan bod komen in dit vak zijn hogere-orde programmeren, overloading (ook bekend als ad-hoc polymorfie), recursie, (algebraische) datatypen en pattern matching, parametrische polymorfie (ook bekend als generics in C# en Java), lazy evaluation, domein-specifieke talen, currying, anonieme functies, en referential transparency. Sommige van deze ben je misschien al in een andere programmeertaal tegengekomen, anderen zullen compleet nieuw zijn. De essentie van de meeste van deze concepten is dat ze je toestaan je oplossingen voor problemen, op een abstractere en daarom vaak compactere, en herbruikbare manier op te schrijven.

De programmeertaal die we gebruiken om deze concepten te illustreren is Haskell. Haskell heeft naast een grote uitdrukkingskracht ook een krachtig typesysteem zodat de compiler je al in een vroeg stadium kan wijzen op fouten die je hebt gemaakt.

In de taal Haskell is het niet toegestaan om de waarde van een variabele te wijzigen. Dat heeft vele voordelen, maar maakt het programmeren in Haskell in eerste instantie ook een behoorlijke uitdaging. Het is in een pure taal als Haskell ook zo dat je heel voorzichtig moet omgaan met andere neveneffecten, zoals het doen van I/O. Omdat deze nu eenmaal een onderdeel zijn van onze wereld, bevat Haskell zogenoemde monads die het omgaan met neveneffecten stroomlijnen. Voordelen die voortvloeien uit de keuze om op deze manier met side effects om te gaan zijn dat het veel makkelijker is om dit soort programma's te paralleliseren, en je kunt er eenvoudiger eigenschappen van bewijzen (Haskell programma's gedragen zich veel meer als wiskundige functies). Dit laatste gaan we in dit vak ook doen, bijvoorbeeld met behulp van equationeel redeneren en inductie.

Literatuur:
  • Dictaat: Functioneel programmeren (versie 2014-2015) welke dit jaar alleen te verkrijgen is via de site van dit vak. Deze is qua vorm behoorlijk verschillend van de versie 2013-2014 (hoewel de inhoud wel redelijk overeenstemt), en gebruik van de oude versie wordt afgeraden.
  • De slides behorende bij het vak
  • Zie verder de wiki site van dit vak.
Werkvorm:Per week kun je rekenen op:
  • 2 x 2 uur hoorcollege
  • 1 x 2 uur werkcollege
  • 1 x 2 uur praktikum
Toetsvorm:Het vak wordt beoordeeld aan de hand van twee toetsen (t1, t2) en een aantal praktika (een aantal kleine praktika en een groter praktikum).

Het tentamendeelcijfer T wordt berekend als T = t1*0.3 + t2*0.7. Het eerste deeltentamen telt voor slechts 30 procent mee, omdat het vooral bedoeld is om je te laten zien hoe je er voor staat. Alle stof van dit deeltentamen is ook onderdeel van de stof voor het latere tentamen.

Voor het praktikumcijfer P geldt dat het een gewogen gemiddelde is van de verschillende praktika. De weging van de praktika's is te vinden op de vak wiki.

Laat nu A = (T + P)/2. Het eindcijfer E zoals dat afgerond zal worden gecommuniceerd naar het studiepunt is dan als volgt te bepalen: Het vak is alleen gehaald als A >= 5,5, P >= 5,0 en T >= 5,0. In dat geval is het eindcijfer E gelijk aan A. In alle andere gevallen heeft de student het vak niet gehaald. In die gevallen wordt het cijfer als volgt bepaald (van boven naar beneden):

  • E = 5,0, als A >= 5,5, en T < 5,0 of P < 5,0
  • E = A, als A >= 4,0 en A < 5,5
  • E = 4,0, als A < 4,0, P >= 4,0, en voor t2 is geen cijfer uitgedeeld
  • E = A, als A < 4,0, en de student heeft aan alle onderdelen meegedaan
  • E = NVD, anders

Aanvullend practicum vindt plaats in de eerste helft van periode 2. De aanvullende toets vindt plaats halverwege periode 2. Deelresultaten van voorgaande jaren zijn niet inzetbaar.

Het kopiëren van (delen van) oplossingen is uitdrukkelijk niet toegestaan.

Inspanningsverplichting voor aanvullende toets:Als E minstens een vier is, en je hebt het vak nog niet gehaald, dan mag je meedoen aan de aanvullende toets.

Doe je mee aan het hertentamen, bedenk dan dat het cijfer van dat tentamen in zijn geheel T bepaalt. En dat je door het herkansen van praktika het cijfer P nooit tot meer dan een 6,0 kunt verhogen.

wijzigen?