Yliopiston etusivulle Suomeksi Inte på svenska No english version available
Helsingin yliopisto Tietojenkäsittelytieteen laitos
 

Tietojenkäsittelytieteen laitos

582315: Johdatus funktionaaliseen ohjelmointiin (4 op), kevät 2009

Kurssilla perehdytään ohjelmointityyliin, jossa vältetään sijoitusten tai muiden sivuvaikutusten käyttöä ja pyritään esittämään käsitteitä arvoina ja niiden välisinä funktioina. Samalla tutustutaan Haskell-ohjelmointikieleen, joka soveltuu tällaiseen tyyliin erityisen hyvin.

  • Valinnainen kurssi, laajuudeltaan 4 op.
  • Luennot 14.1.-19.2. ke, to 12-14 B123, Lauri Alanko ja Joel Kaasinen
  • Laskuharjoitusryhmät:
    • HUOM! Ensimmäisellä viikolla mikroluokassa B221
    • Pe 12-14 B221 (16.1.), Ti 12-14 C222 (20.1.-17.2.) Aki Reijonen
      • Uusi ryhmä!
      • Huomaa: ensimmäisellä viikolla perjantaina, sen jälkeen tiistaisin
    • To 16-18 B221 (15.1.), CK111 (22.1.-19.2.) Aki Reijonen
    • Pe 14-16 B221 (16.1.), B119 (23.1.-20.2.) Ilmari Vacklin
  • Kurssikoe to 26.2. klo 16-19 A111
  • Erillis/uusintakoe ti 31.3. klo 16-20 A111
    • Tämä on viimeinen koe jossa laskuharjoituksista saatavat bonuspisteet vielä huomioidaan. Koe toimii samalla sekä erilliskokeena että luentokurssin uusintakuulusteluna. Koealueena on sen vuoksi joko Nykäsen kalvot kokonaisuudessaan tai luennoilla käsitellyt asiat. Näissä on paljon päällekkäisyyttä, mutta kokeessa voi siis olla myös vaihtoehtoisia tehtäviä, joista toisen aihetta on käsitelty vain luennoilla ja toisen aihetta vain Nykäsen kalvoilla.
    • Koekysymykset, niiden lähdekoodi ja ohessa annetut kirjastomäärittelyt
    • Mallivastaukset ja arvosteluperusteet ja niiden lähdekoodi (vaatii myös kokeen lähdekoodin samassa hakemistossa)
  • Erilliskoe 11.8.2009
  • Erilliskoe 15.9.2009
  • Erilliskoe 6.11.2009
  • Erilliskoe 30.3.2010

Tulokset

  • Luentokurssin tulokset
  • Laskuharjoitusten ja kurssikokeen tarkistuslista
  • Erillis/uusintakokeen 31.3.2009 tulokset
  • Kokeiden arvostelusta voi kysyä mailitse

Esitietovaatimukset

Muodollisena esitietovaatimuksena on Tietorakenteet-kurssi. Erityisesti listojen ja puiden tulisi olla tuttuja käsitteitä. Matematiikan kurssit Algebra I ja Logiikka I ovat myös hyödyllistä taustaa, mutta eivät välttämättömiä.

Suoritustavat

Kurssi voidaan suorittaa luennoilla, laskuharjoituksilla ja kurssikokeella, jotka pidetään keväällä 2009 kolmosperiodissa, tai myöhemmin erilliskokeella.

Luentokurssillakin pelkkään kurssikokeeseen osallistumalla voi jo saada täydet pisteet (60 p). Laskuharjoituksissa voi kuitenkin hakea itselleen lisäpisteitä (max. 12p). Harjoitustilaisuuksia on kuusi, ja kussakin pelkällä läsnäolollakin jo saa yhden pisteen, joten niihin on täysin sallittua osallistua valmistautumattakin.

Oppimateriaali

Ensisijaisena oppimateriaalina toimivat luentokalvot, jotka valmistuvat kurssin aikana. Matti Nykäsen aiemmin pitämän kurssin materiaali on myös hyvä lähde, mutta siinä on hieman erilaiset painotukset kuin tällä kurssilla.

Suosituksia oheislukemistoksi tulee kurssin aikana.

Luennot

  1. luento 14.1.2009.
  2. luento 15.1.
  3. luento 21.1.2009
  4. luento 22.1.2009
    • Rekursio jatkuu? Korkeamman kertaluvun funktiot.
    • Kalvot
    • Luennoilla käytetty rekursion lajien luokittelu on peräisin How to Design Programs-kirjasta, jonka osat II, III ja V käsittelevät rekursiota varsin perinpohjaisesti.
  5. luento 28.1.2009
  6. luento 29.1.2009
  7. luento 4.2.2009
  8. luento 5.2.2009
  9. luento 11.2.2009
  10. luento 12.2.2009
    • Laiskuus jatkuu
  11. luento 18.2.2009
    • Joel pitää
    • Monadinen I/O
    • Kalvot
    • Nykäsen kalvojen sivut 368-392.
  12. luento 19.2.2009
    • Kertausta, erityisaiheita toiveiden mukaan.
    • Aihetoiveista voi kertoa wikissä.

Harjoitustehtävät

Wiki

Sekalaista lisämateriaalia löytyy kurssin wiki-sivulta.

IRC-kanava

Kurssilla on oma IRC-kanava, #tkt-jfo@IRCnet, jossa voi keskustella kurssin asioista. Myös kurssin opettajat ovat ajoittain paikalla vastaamassa kysymyksiin.

Kurssin sisältöhahmotelma

Seuraavassa on alustava luonnos kurssin rungoksi. Lopullinen sisältö määräytyy kurssin edetessä, ja kaikkia mainittuja aiheita ei varmaankaan ehditä käsitellä.

  • Johdanto
  • Haskellin esittely
    • Yleistä
      • leksikaalinen syntaksi
      • kommentit
      • sisennys
    • Modulit
      • modulin määrittely
      • modulien tuonti
    • Lausekkeet
      • vakiot
      • muuttujat
      • funktiokutsut
      • infix-operaatiot
    • Määrittelyt
      • parametrit
      • hahmonsovitus
      • where-lauseet
      • tyyppiannotaatiot
    • GHCI
      • lausekkeiden tulkitseminen
      • paikalliset määrittelyt
      • modulien tuonti
  • Aritmetiikka ja rekursio
  • Induktiiviset tietotyypit
    • Bool
    • Uusien tietotyyppien määrittely
    • Hahmonsovitus
    • Maybe ja monikot
  • Polymorfismi
  • Rekursiiviset tietotyypit
    • Listat ja puut
    • Rakenteellinen rekursio
  • Korkeamman kertaluvun operaatiot
    • Yleiset listaoperaatiot
  • Laiskuus ja tehokkuus
    • Päättymätön laskenta
    • Laiska laskenta
    • Tiukat ja löysät parametrit
    • Äärettömät ja sykliset tietorakenteet
    • (Vuot)
    • (Syklinen ohjelmointi)
    • (Syöttö ja tuloste laiskoina listoina)
  • Jäsentäminen
    • Lausekepuut
    • Kieliopit
    • Merkkijonot listoina
    • Epädeterministinen jäsentäminen
    • (Fuusio)
  • Abstraktit tietotyypit
    • Näkyvyyden rajaaminen moduleilla
    • Invariantit
    • (Haamutyypit)
  • (Funktionaaliset tietorakenteet)
  • Tyyppiluokat
    • Eq, Ord, Enum
  • Lämpöiset pörröiset juttuset
    • Maybe, List
    • (Reader, State)
  • I/O
  • Kertausta jos ehtii
Lauri Alanko