Johdatus funktionaaliseen ohjelmointiin

582315
4
Algorithms and machine learning
Intermediate studies
Kurssi johdattaa ohjelmointitapaan, jossa ohjelman suoritusta ajatellaan jonkin matemaattisesti määritellyn funktion arvon laskemisena. Tällainen lähestymistapa ohjelmointiin on hyödyllinen erityisesti silloin kun pyritään tekemään todistettavasti oikeita ohjelmia. Kurssilla on esimerkkinä funktionaalisesta ohjelmointikielestä Haskell (ks. http://www.haskell.org/).
Year Semester Date Period Language In charge
2012 spring 13.03-26.04. 4-4 Finnish Joel Kaasinen

Lectures

Time Room Lecturer Date
Thu 16-18 B123 Joel Kaasinen 15.03.2012-15.03.2012
Thu 16-18 D122 Joel Kaasinen 22.03.2012-22.03.2012
Thu 16-18 CK112 Joel Kaasinen 29.03.2012-26.04.2012

Huom! Luento TO 22.3. salissa D122 ja luennot TO 29.3. alkaen auditoriossa CK112!

The lecture on THU 22.3. in room D122 and the lectures starting from THU 29.3. in auditorium CK112!

Information for international students

Contact me (joel dot kaasinen at cs dot helsinki dot fi) if you want to participate in English!

General

 HUOM! Kesällä järjestetään kurssi Haskell Workshop!

Completing the course

Harjoitustehtävät

Kurssi suoritetaan harjoitustehtävillä. Harjoitustehtävät ovat lyhyitä ohjelmointitehtäviä joita on n. 20 / viikko.

Harjoitustehtäviin saa pajamuotoista ohjausta.

Harjoitustehtävät palautetaan palautusjärjestelmään. Ks. alla.

Harjoitustehtäville on saatavilla yksikkötestit.

Arvostelu

Viimeinen harjoitustehtäväsetti toimii "leikkurina": siitä on suoritettava vähintään 80% päästäkseen kurssista läpi. Kurssin arvosana määräytyy lineaarisesti tehtyjen tehtävien kokonaismäärästä siten että 40% = 1 ja 90%=5.

  • Tehtävien kokonaismäärä: 126
  • Pisterajat:
  1. 0-65 tehtävää
  2. 66-80 tehtävää
  3. 81-96 tehtävää
  4. 97-112 tehtävää
  5. 113-126 tehtävää

Viikkoaikataulu

  • Ti 14-18 Pajaohjausta (BK107)
  • To 12-16 Pajaohjausta (BK107)
  • To 16-18 Luento
  • To 23:59 Edellisen viikon tehtävien deadline
  • Tehtävät julkaistaan väh. viikkoa ennen deadlinea.

Huom! Pajaohjausta vasta toisesta luentoviikosta alkaen sillä ensimmäiset tehtävät julkaistaan torstaina 15.3.!

Huom! Pajaohjaukset jatkuvat 10.5 asti!

Literature and material

Luennot

Saatavilla kaksi versiota. Päivittyvät sitä mukaa kun tulevat valmiiksi.

  • Puhdas html
  • Html-kalvot
  • Toisen luennon virheet korjattu 22.3.
  • opc-esimerkki korjattu 12.4.
  • kolmannen luennon virheet korjattu 13.4.
  • neljännen luennon typot korjattu ja viimeinen esimerkki päivitetty 19.4.
  • kuudennen luennon virheet korjattu (toivottavasti) 27.4.

Harjoitukset

Kalvot sisältävät lyhyen ohjeen tehtävätiedostojen käytöstä.

  • Viikko 1: W1.hs W1Test.hs
    • Deadline 22.3
    • korjattu tehtävänantoja 15.3.
    • lisätty huomio smallestDivisor-tehtävään 16.3.
    • Mallivastaus: W1Sol.hs
  • Viikko 2: W2.hs W2Test.hs
    • Deadline 29.3
    • Vaihtoehtoinen testitiedosto: W2TestSansHT.hs. Käytä tätä jos törmäät mystisiin ongelmiin W2Test.hs:n kanssa.
    • lisätty tehtäväpohjaan argumentit 21.3.
    • korjattu powersin esimerkit 21.3.
    • korjattu fromTo-testin virheviesti 22.3.
    • lisätty esimerkki search-tehtävään 23.3.
    • selvennetty quicksort-tehtävänantoa 28.3.
    • parempi squares-esimerkki 28.3.
    • korjattu searchin esimerkki 29.3.
    • Mallivastaus: W2Sol.hs
  • Viikko 3: W3.hs W3Test.hs
    • Deadline 12.4 (välissä pääsiäisloma)
    • debug-tehtävän testi korjattu 29.3. Katsothan että ratkaisusi menee uudesta testistä läpi!
    • printFibs-testiä pienennetty 10.4.
    • pieni selvennys interact'-tehtävän tekstiin 12.4.
    • selvennetty debug-tehtävän tehtävänantoa ja lisätty esimerkkejä 12.4.
    • Lisätty esimerkki mkCounter-tehtävään 12.4.
    • Mallivastaus: W3Sol.hs
  • Viikko 4: W4.hs W4Test.hs
    • Deadline 19.4
    • Korjattu puutestit testaamaan pienet tapaukset ensin 12.4.
    • Lisätty esimerkkejä rgb-tehtävänantoon 12.4.
    • Korjattu tehtävänantoihin jääneet TODO-merkkinnät, eli selvennetty tehtäviä 15 ja 16  13.4.
    • Selvennetty tehtävää 16 lisää 16.4.
    • Mallivastaus: W4Sol.hs
  • Viikko 5: W5.hs W5Test.hs
    • Deadline 26.4
    • Korjattu tehtävän 3 testi ja parannettu tehtävän 2 testiä 19.4.
    • Korjattu tehtävän 3 tehtävänantoa 19.4.
    • Korjattu tehtävän 2 testi 24.4.
    • Mallivastaus: W5Sol.hs
    • Mallivastaukseen lisätty selitys Fun-tehtävän ratkaisusta 2.5.
  • Viikko 6:W6.hs W6Test.hs
    • Deadline 10.5.
    • Parannettu tehtävän 9 testejä 28.4.
    • Tehtävästä 13&14 oli unohtunut syöteformaatin kuvaus. Lisätty 29.4.
    • Tehtävien 19&20 testejä laajennettu 3.5.
    • Tehtävän 16 testejä löysennetty 6.5.
    • Tehtävien 19&20 eräs esimerkki korjattu 7.5.
    • Mallivastaus: W6Sol.hs
  • Viimeinen viikko: W7.hs W7Test.hs
    • Deadline 10.5.
    • Tämä on se setti josta täytyy saada vähintään 80% (eli väh. 8 tehtävää!) päästäkseen kurssista läpi
    • Tehtävän 6 tehtävänanto korjattu 3.5.
    • Mallivastaus: W7Sol.hs
  • Pistetilasto

Palutusjärjestelmä

Palautusjärjestelmä on osoitteessa http://joamaki.users.cs.helsinki.fi/jfo/ . Kirjaudu sisään opiskelijanumerollasi ja sukunimelläsi. Palveluun on luotu tunnukset niille, jotka olivat ilmoittautuneet kurssille ilmo-järjestelmässä 19.3.

Jos et pääse kirjautumaan, ota yhteyttä Joel Kaasiseen (joel dot kaasinen at cs dot helsinki dot fi)!

Palautusjärjestelmään ladataan tehtävätiedostot (W1.hs jne). Voit palauttaa monta versiota, viimeinen ennen deadlineä palautettu arvostellaan.

Palautusjärjestelmästä näet myös palautuksiisi annetut kommentit!

QuickCheckin asentaminen

Jos kohtaat seuraavannäköisen virheilmoituksen:

W1Test.hs:8:7:     Could not find module `Test.QuickCheck.All': 

täytyy sinun asentaa QuickCheck-kirjasto. Se käy usemmilla järjestelmillä näin:

cabal update cabal install quickcheck

Tämä asentaa kirjaston kotihakemistoosi hakemiston .cabal alle, josta runhaskell ja ghc sen löytävät.

Linkkejä