저는 함수형 프로그래밍과 스칼라를 배우려고합니다. 그래서 Chiusano와 Bjarnason의 "Functional Programming in Scala"를 읽었습니다. 목록의 경우 왼쪽 접기와 오른쪽 방법을 이해하는 데 문제가 있습니다. 나는 여기를 둘러 보았지만 친근한 초보자를 찾지 못했습니다. 그래서이 책에서 제공하는 코드는 다음과 같습니다 단점과 무기 호는Scala fold right와 fold left
def foldRight[A,B](as: List[A], z: B)(f: (A, B) => B): B = as match {
case Nil => z
case Cons(h, t) => f(h, foldRight(t, z)(f))
}
def foldLeft[A,B](l: List[A], z: B)(f: (B, A) => B): B = l match {
case Nil => z
case Cons(h,t) => foldLeft(t, f(z,h))(f)
}
는 :
그래서case class Cons[+A](head: A, tail: List[A]) extends List[A]
case object Nil extends List[Nothing]
실제로 왼쪽 폴드 옳은 일을해야합니까? 왜 "유틸리티"방법으로 필요합니까? 그 (것)들을 이용하는 다른 많은 방법이 있고 나는 그 (것)들을 얻지 않기 때문에, 또한 그 (것)들을 이해하는 말썽이있다.
다음 스레드를 살펴보십시오. http://stackoverflow.com/questions/24370549/foldleft-v-foldright-does-it-matter 이러한 작업과 관련된 많은 정보가 있습니다. 나에게 중복되는 것처럼 보입니다. – Pavel
그 질문에 사용자가 물어 보는 것은 당면한 문제에 대해 꽤 잘 이해하고있는 것으로 보입니다. 나는 도움이되지 못합니다. – jrsall92
제공하신 코드. 특별한 질문이 있습니까? 정확하게 어려움을 만드는 것은 무엇입니까? 구문? 차이점을 이해하는 열쇠는 두 경우 모두 재귀 호출 방식입니다. 그것은 다르다. 꼬리 재귀에 대해 읽어보십시오. 희망이 도움이 될 것입니다. More links : https://oldfashionedsoftware.com/2009/07/10/scala-code-review-foldleft-and-foldright/ – Pavel