Department of Information and Computing Sciences

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

Onderwijs Informatica en Informatiekunde

Vak-informatie Informatica en Informatiekunde

Functioneel programmeren

Website:website met extra informatie
Vakcode:INFOFP
Studiepunten:7.5 ECTS
Periode:periode 1 (week 36 t/m 45, dwz 5-9-2016 t/m 11-11-2016; herkansing week 1)
Timeslot:B
Deelnemers:tot nu toe 263 inschrijvingen
Rooster:De officiële roosters staan ook in Osiris
Docenten:
vormgroeptijdweekzaaldocent
college   di 9.00-10.4537-39 KBG-COSMOS Jurriaan Hage
 
41-44 KBG-COSMOS
do 13.15-15.0036 KBG-COSMOS
37-44 KBG-COSMOS
practicum groep 1 do 15.15-17.0036 BBG-109 CLZ
37-44 BBG-115 CLZ
groep 2 do 15.15-17.0036 BBG-106 CLZ
37-44 BBG-175 CLZ
groep 3 do 15.15-17.0036 BBG-103 CLZ
37-44 BBG-109 CLZ
groep 4 do 15.15-17.0036 BBG-112 CLZ
37-44 BBG-112 CLZ
groep 5 do 15.15-17.0036 BBG-169
37-44 BBG-223
groep 7 do 15.15-17.0036 BBG-165
37-44 BBG-169
werkcollege groep 1 di 11.00-12.4537-39 BBG-061 Alejandro Serrano Mena
  
41-44 BBG-061
groep 2 di 11.00-12.4537-39 BBG-023 Victor Cacciari Miraldo
Douwe Wermer
   
41-44 BBG-023
groep 3 di 11.00-12.4537-39 BBG-001 Ferdinand van Walree
 
41-44 BBG-001
groep 4 di 11.00-12.4537-39 BBG-201 Jan Posthoorn
 
41-44 BBG-201
groep 6        Ivo Gabe de Wolff
 
groep 7        Suzan Stempher
 
groep 8        Arian van Putten
 
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 2015-2016) welke zowel op papier via de gebruikelijke kanalen alswel electronisch via de website te verkrijgen is. 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. Mocht je nog een versie 2014-2015 hebben, dan kun je deze dit jaar nog wel gebruiken.
  • 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 practica (een aantal kleine practica en een groter practicum).

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 practicumcijfer P geldt dat het een gewogen gemiddelde is van de verschillende practica. De weging van de practica 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. Deelresultaten van voorgaande jaren zijn niet inzetbaar.

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

Inspanningsverplichting voor aanvullende toets:Om aan de aanvullende toets te mogen meedoen moet de oorspronkelijke uitslag minstens 4 zijn.
wijzigen?