Listのappend

再帰の(略
ちょうどコップ本に載ってたので、変数名以外コップ本に書いてあるまま。

//Scala
def append[T](lst1: List[T], lst2: List[T]):List[T]=
  lst1 match{
    case List() => lst2
    case head :: tail =>  head :: append(tail,lst2)
}
println(append(List(1,2,3),List(4,5,6))) //=>List(1,2,3,4,5,6)

上記のようにパターンマッチ使うと、head,tailとか使わなくてもリスト分解出来ると。けど、慣れてないからまずはこう書きたくなるなあ。

//Scala
def append[T](lst1: List[T], lst2: List[T]):List[T]={
  if (lst1.isEmpty) lst2
  else lst1.head :: append(lst1.tail,lst2)
}
//あるいは
def append[T](lst1: List[T], lst2: List[T]):List[T]=
  lst1 match {
    case List() => lst2
    case List(_*) => lst1.head :: append(lst1.tail,lst2)
}
println(append(List(1,2,3),List(4,5,6))) //=>List(1,2,3,4,5,6)