Ohjelmointitekniikka (Scala), kevät 2010

Arviointiperusteet tehtäville 1, 3 ja 4.

Ilmari Vacklin

Tehtävä 1 (for-yield)

Tehtävässä on kaksi eri for-silmukan muunnelmaa, joista ensimmäinen on ns. listakomprehensio (for-yield). Ensimmäiseltä riviltä pitää ymmärtää:

Toiselta riviltä pitää ymmärtää:

Tehtävä 3 (Curry-muunnos)

Tehtävässä piti Curry-muuntaa seuraava lause:

def f(n: String, i: Int) { println(n + ": " + i) }

Tarkoituksena oli saada jotain tälläistä:

def g(n: String)(i: Int) { println(n + ": " + i) }

tai

def g(n: String) = (i: Int) => println(n + ": " + i)

tai jopa

def g = (n: String) => (i: Int) => println(n + ": " + i)

Ensimmäinen vaihtoehto on se idiomaattisin, ja onkin vain syntaksisokeria alempana oleville.

Pisteitä sai seuraavanlaisesti:

Tehtävä 4 (Rajapinnat)

Tehtävässä kysyttiin, mitä ovat rikkaat ja ohuet rajapinnat, ja mitä työkaluja Scala tarjoaa rikkaiden rajapintojen ohjelmointiin. Tehtävässä pyydettiin esimerkkejä ohjelmahahmotelmina sekä Scalan valmiista kalustosta.