Gegeven is het volgende programmafragment in Scala, dat voorzien is van regelnummers:
1 val belowFirst = (xs : List[Int]) => {
2 val first = xs(0)
3 val isBelow = (y : Int) => y < first
4 for (x <- xs; if (isBelow(x)) yield x
5 }
6 ...
7 belowFirst(List(5, 1, 7, 4, 9, 11, 3))
8 // => List(1, 4, 3)
Het sleutelwoord yield geeft aan dat het resultaat van een berekening de waarde van x oplevert.
a Van de lokale variabele first op regel 2 is het type niet gedeclareerd. Welke techniek maakt dit mogelijk?
b Wat is de betekenis van het sleutelwoord val op regel 2?
c Wat is het type van de variabelen first op regel 2 en isBelow op regel 3?
d Welke techniek wordt op regel 4 in de for-lus gebruikt om iteratie tot stand te brengen?
e Leg uit wat een vrije variabele is en geef aan welke variabele vrij is op regel 3.

  • a Door type-inferentie is de compiler in staat om het type van een variabele uit de context te extraheren.
    b Het sleutelwoord val betekent dat de gedeclareerde variabele onveranderbaar (immutable) is.
    c De variabele first heeft hetzelfde type als de elementen van de lijst xs (zie regel 1), dat wil zeggen het type Int. De variabele isBelow is een functie van Int naar een boolean-waarde.
    d Om iteratie tot stand te brengen, wordt in regel 4 een lijstcomprehensie gebruikt.
    e Een vrije variabele is een variabele die in een expressie gebruikt wordt, maar buiten de expressie is gedefinieerd. Op regel 3 is dat de variabele first

    Rapporteer Plaats commentaar