勉強のためにListのAPIはなるべく使わない方向で。
// P14 (*) Duplicate the elements of a list.
// Example:
// scala> duplicate(List('a, 'b, 'c, 'c, 'd))
// res0: List[Symbol] = List('a, 'a, 'b, 'b, 'c, 'c, 'c, 'c, 'd, 'd)
def duplicate[T](xs: List[T]): List[T] = xs match {
case h :: t => h :: h :: duplicate(t)
case Nil => xs
}
def duplicate_tail[T](xs: List[T]) = {
def recursive(ys: List[T], acc: List[T]): List[T] = ys match {
case Nil => acc
case h :: t => recursive(t, h :: h :: acc)
}
recursive(xs, Nil).reverse
}
def duplicate_map[T](xs: List[T]): List[T] = xs.flatMap{ x => x :: x :: Nil}
//val l = List('a, 'b, 'c, 'c, 'd)
val l = 1 to 1000000 toList
println(duplicate_tail(l))
println(duplicate_map(l))
println(duplicate(l)) // StackOverFlow
解答例
そうですよね。
No comments:
Post a Comment