. 다음 서명을 가정합니다꼬리 재귀 구현 내가, 기능 방식으로 그들을 <code>partition</code> 인 중 하나를 스칼라의 목록 방법의 몇 가지를 구현하기 위해 노력했습니다 운동 목적
def partition[T](l: List[T], f: T => Boolean): (List[T], List[T])
그것은 두리스트로 구성된 튜플을 반환 - 첫 번째는 통과 조건 f
및 다른 모든 요소를 포함하는 다른 하나를 충족 l
의 모든 요소가 포함되어 있습니다. 이 스택 오버플로 질문 (Can all recursive functions be re-written as tail-recursions?)에서
def partition[T](l: List[T], f: T => Boolean): (List[T], List[T]) = {
l match {
case Nil => (Nil, Nil)
case head :: rest => {
val (left, right) = partition(rest, f)
if (f(head))
(head :: left, right)
else
(left, head :: right)
}
}
}
그것이 누적 어떤 경우에 사용될 수 있음을 분명히한다 :
나는 불행하게도 꼬리 재귀되지 않습니다 재귀 솔루션을 함께했다. 주어진 목록에서 나는 역순으로 최종 목록을 반환 할 것이므로 이것이 불가능하다고 주장 할 것입니다. 당신은 나에게 꼬리 재귀 솔루션을 전해 주 시겠어요? 어쩌면 연속 통과 (나는 그것이 어떻게 작동하고 어떻게 적용될 수 있는지 이해하지 못했다)일까요?
결과를 되돌리기 전에 되돌릴 수 있습니다. – Dima