1
필자는 "함수 프로그래밍 원리"에서 "팩 함수"연습을했습니다.빈 인자 목록 전달
List[List[T]]
에 연속 복제본을 넣습니다.
예
input: List("a", "a", "b", "b", "c", "a")
output: List(List(a, a), List(b, b), List(c), List(a))
이 기능을 감안할 때 ...
def pack[T](xs: List[T]): List[List[T]] = {
def go[T](ys: List[T], acc: List[List[T]]) : List[List[T]] = ys match {
case Nil => acc
case x :: xs_ => val r: List[T] = ys.takeWhile(a => a == x)
go(ys.drop(r.length), acc :+ r)
}
go(xs, List(Nil).filter(_ != Nil)) // *** line in question ***
}
는 내부 목록이 비어있는 List[List[T]]
에 전달할 수있는 더 나은 방법이 있나요?
거기에 filter
이 없으면 pack(...)
의 결과는 List()
입니다.
왜냐하면 ... [case 객체 Nil extends List \ [Nothing \]] (https://github.com/scala/scala/blob/v2.10.2/src/library/scala/collection/immutable/) List.scala # L334) 그래서 닐 <: 리 이 경우 List T [N] <: List
Jamil
@ Jamil 또한 Nil <: List [Nothing] <: List [List [T] ] – Eastsun
같은 말을하려고합니다. 대답에 설명을 추가할까요? – Jamil