2016-04-17 14 views
0

"match ... case"を使ってリストの値を2倍にするスカラー関数を作りたいと思います。例えばなぜこのリストは空です

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

私はこの関数を書いた:

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

しかし、私は結果として空のリストを取得:

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

誰もが私は何を私にティールことができます間違っている?

+0

なぜ、 'map(_ * 2)'を使わないのですか? –

+0

はい、私は具体的に "マッチ...ケース"を使用する必要があります。 – undisp

答えて

3

;文を閉じて、効果的に結果を捨て、y * 2doubleList(ys)

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

P.S.の結果と新しいListを作成する代わりに::を使用あなたはスカラーの行の最後に;を置く必要はありません。

+0

ああ、私はそれについて知らなかった。ステートメントを閉じます。あなたの答えをありがとう、素晴らしい仕事をした。 – undisp

関連する問題