2016-04-17 16 views
0

Ich möchte eine Funktion in Scala, die "match ... case" verwendet, um die Werte einer Liste zu verdoppeln.Warum ist diese Liste leer?

Zum Beispiel:

doubleList(List(2,1,4,5)) 
//> res0: List[Int] = List(4, 2, 8, 10) 

ich diese Funktion schrieb:

def doubleList(xs: List[Int]): List[Int] = 
    xs match { 
     case y :: ys => 
     y * 2; doubleList(ys); 
     case Nil => xs; 
    } 

Aber ich erhalte eine leere Liste als Ergebnis:

//> res0: List[Int] = List() 

Kann mir jemand teel, was ich bin falsch machen?

+0

Jeder Grund, warum Sie nicht nur 'map (_ * 2)' verwenden? –

+0

Ja, ich bin verpflichtet, spezifisch "match ... case" zu verwenden. – undisp

Antwort

3

Die ; die Anweisung schließt und wirft effektiv das Ergebnis entfernt, verwenden :: stattdessen ein neues List mit dem Ergebnis der y * 2 und doubleList(ys)

def doubleList(xs: List[Int]): List[Int] = 
    xs match { 
    case y :: ys => 
     y * 2 :: doubleList(ys) 
    case Nil => xs 
    } 

P. S. zu erstellen Sie müssen keine ; am Ende einer Zeile in Scala setzen.

+0

Oh, ich wusste nichts davon; schließt die Aussage. Danke für deine Antwort, hat super geklappt. – undisp