Helsingin yliopisto Tietojenkäsittelytieteen laitos
 

Tietojenkäsittelytieteen laitos

Tietoa laitoksesta:

 

582315: Johdatus funktionaaliseen ohjelmointiin

1. Kurssikuvaus

Kurssi johdattaa ohjelmointitapaan, jossa ohjelma pyritään kirjoittamaan siten, että sen suorittamista voitaisiin ajatella jonkin matemaattisen funktion arvon laskemisena. Tällainen lähestymistapa ohjelmointiin on hyödyllinen esimerkiksi silloin, kun pyritään sellaisiin ohjelmiin, joiden oikea toiminta voitaisiin todistaa. Esimerkkinä funktionaalisesta ohjelmointikielestä kurssilla on Haskell.

2. Esitietovaatimukset

Esitietoina oletetaan kurssi 58131-8: Tietorakenteet tai vastaavat perustiedot ohjelmoinnista ja tietorakenteista.

3. Asema opetuksessa

Valinnainen kurssi, joka on

uusimmassa (1.8.2005-) tutkinnossa
perus- ja aineopintotasolla laajuudeltaan 4 op
vanhemmissa tutkinnoissa
cum laude approbatur -tasolla laajuudeltaan 2 ov.

4. Tavoite

Eri ohjelmointikielet eroavat toisistaan varsinkin siinä, millaisia ongelmanmallinnustapoja ne tukevat. Perusopetuksessa käytettävän Java-ohjelmointikielen myötä on tutustuttu ongelmien mallinnukseen olioita ja periytymistä käyttämällä. Tällöin keskitytään käsitehierarkioiden esittämiseen.

On kuitenkin sellaisia ongelmia, joissa keskeinen mallinnettava asia onkin sellainen syöte-tulos-vastaavuus, joka voidaan esittää hierarkioita luontevammin (matemaattisilla) funktioilla ja niiden välisillä operaatioilla. Näin mallinnettuja tehtäviä on vuorostaan luontevampaa ohjelmoida sellaisilla kielillä, joissa funktio on peruskäsite (olion sijaan tai ohella).

Kurssin yleistavoite onkin esitellä tällaista funktionaalista perustuvaa ohjelmointia käyttäen funktionaalista ohjelmointikieltä. Esimerkkikielenä on Haskell, joka on tämä ohjelmointikoulukunnan puhdasverinen edustaja.

5. Suoritustavat

Kurssin voi suorittaa kahdella eri tavalla:

luennoilla, laskuharjoituksilla ja kurssikokeella
jotka pidetään syksyn 2006 toisella periodilla
erilliskokeella
näiden luentojen jälkeen. Erilliskoeajoista ilmoitetaan laitoksen verkkosivuilla erikseen.

Sisältö on molemmissa tavoissa sama, eli kyseiset luennot.

Laskuharjoitukset eivät ole pakollisia. Kurssista voi saada täydet pisteet ja parhaan arvosanan pelkällä kurssikokeella.

Laskuharjoituksista saa kuitenkin lisäpisteitä (joita on jaossa 1/5 koepisteistä). Nämä lisäpisteet lisätään kurssikokeesta saatuihin pisteisiin arvosanaa määrättäessä.

Laskuharjoituksista kerätyt lisäpisteet otetaan huomioon kurssikokeen lisäksi vielä ensimmäisessä kurssin jälkeisessä erilliskokeessa. Seuraavissa erilliskokeissa niitä ei enää oteta huomioon.

The exercise sessions are held in Finnish. However, these exercises are optional: You can get full points from the course exam alone. On the other hand, the exercises provide extra points (up to 1/5th above the exam points) to supplement your exam score. These extra points are taken into account in the course exam and the first separate exam after the course, but not in any subsequent separate exams. Contact the lecturer in advance if you want the exam questions in English.

6. Materiaali

Luentokalvot
tulevat saataville sähköisessä muodossa allaolevaan kalenteritaulukkoon sitä mukaa kun ne valmistuvat kurssin edetessä.
NOTE: Lecture notes are in Finnish. They will become available in electronic form as the course progresses. You can download them from the calendar table below.
Laskuharjoitustehtävät
Tulevat saataville samaan kalenteritaulukkoon edellisen viikon loppuun mennessä.
NOTE: Exercises are also in Finnish. The exercises for next week appear in the same calendar by the end of the preceding week.
Kurssilla ei ole varsinaista oppikirjaa.
Haskell-kielen kotisivuilta löytyy dokumentteja, joita voi käyttää luentojen oheismateriaalina.
NOTE: The course does not have a definite textbook. You can supplement the sides with extra documents via the Haskell home page.
Toteutuksen GHC
Linux-versio käynnistyy komennolla ghci.
Laitoksen XEmacs
sisältää Haskell-moodin, joka käynnistyy silloin kun editoitavan lähdekooditiedoston suffiksi on .hs.

7. Kurssin tapahtumakalenteri

aika tapahtumat
viikko 44/2006
  • Luennot alkavat. Ne pidetään tiistaisin ja torstaisin klo 12-14 Exactumin salissa C222.
  • Luentokalvot 1-108 (myös 4 kalvoa/sivu).
  • 1. harjoitustehtävät ja ratkaisut niiden ohjelmointitehtäviin (mutta ei muihin).
  • Täsmennys tehtävän 1.4 (b) sanamuotoon: Tarkoitus on ohjelmoida funktio, joka muodostaa annetusta siemenluvusta palindromin käyttäen tehtäväpaperissa kuvattua menetelmää.
viikko 45/2006
viikko 46/2006
viikko 47/2006
viikko 48/2006
viikko 49/2006
  • Viimeinen luento- ja laskuharjoitusviikko.
  • MUUTOS 1: Torstain luento pidetäänkin poikkeuksellisesti jo klo 10.15-12.00 ja salissa B222.
  • MUUTOS 2: Itsenäisyyspäivän vuoksi laskuharjoitukset pidetäänkin poikkeuksellisesti vasta perjantaina 8.12. (mutta samaan kellonaikaan ja samassa salissa).
  • Loput koealueeseen kuuluvat luentokalvot 324-392.
  • Näiden lisäksi on myös luonnokset luvuiksi 6 ja 7 mutta niitä ei käsitelty kurssilla eivätkä ne kuulu koealueeseen.
  • Kaiklle kalvoille on myös sisällysluettelo.
  • Verkossa on monia johdatuksia monadien mystiseen maailmaan. Jotkut lähtevät kategoriateoriasta ja vaikuttavat kovin vaikeilta. Eräs kehuttu ohjelmoijalähtöinen johdatus on You Could Have Invented Monads! (And Maybe You Already Have.)
viikko 50/2006
  • Kurssikoe maanantaina 11.12. klo 9-12 Exactumin salissa A111. Varmista sali (ja mahdolliset muutokset) koeaikataulusta.
  • Koealue koostuu luennoilla ja laskuharjoituksissa käsitellyistä asioista.
  • Tulokset ovat nyt Exactumin 2. kerroksen ilmoitustaululla.
  • Koetehtävien ratkaisut.
30.1.2007
  • Erilliskoe klo 16-20 Exactumin salissa A111. Varmista mahdolliset muutokset koeaikataulusta.
  • Koealue on sama kuin kurssikokeessakin.
  • Laskuharjoituspisteet huomioidaan vielä tämän kokeen arvostelussa.
3.4.2007
  • Erilliskoe klo 16-20 Exactumin salissa A111. Varmista mahdolliset muutokset koeaikataulusta.
  • Koealue on sama kuin kurssikokeessakin.
  • Tästä kokeesta alkaen laskuharjoituspisteitä ei enää huomioida arvostelussa.

Tätä sivua ylläpitää kurssin vastuuhenkilö
Matti Nykänen.
Last modified: Tue Dec 19 13:51:53 EET 2006