Functional Programming in Scala가 정의 Applicative#traverse
통과 unit
및 map2
함께구현 실용적 #은
def traverse[A,B](as: List[A])(f: A => F[B]): F[List[B]] =
as.foldRight(unit(List[B]()))((elem, acc) => map2(acc, f(elem))(_ :+ _))
정의로서 :
def map2[A,B,C](fa: F[A], fb: F[B])(f: (A,B) => C): F[C]
def unit[A](a: => A): F[A]
로서 I 내 구현 이해,,210이되도록 동작한다 : 각
(요소 어큐뮬레이터), 호 MAP2 (ACC, F (ELEM) (_ : + _)) 을 (타입 F를 [F (ELEM)의 결과를 추가 할 누적에 B]) (타입 F [목록 [B]]) 내 구현을 위해
, 다음, traverse
의 map2
통화의 (f: (A,B) => C)
부분에서 List[B]
자체에 B
을 추가합니다.
map2
인수를 받아 F[A]
및 F[B]
하지만, 함수 인수 f
는 A
및 B
유형에서 작동합니다. Scala 솔루션의 FP에서 B
은 ::
연산자를 통해 List[B]
에 추가됩니다.
맞습니까?
나는 당신이 말하는 대부분을 따라갈 수 있지만, 나는 그것이 "옳다"라는 것이 무엇을 의미하는지 모른다. 당신이 말한 것이 정확하고, 당신의 구현은 정확합니까? 아니면 무엇입니까? –
위의 모든 것, 제발 :) 선생. 내 대답은 공식 답변과 비슷하지만, 유일한 차이점은 '누적 기'에 각 요소를'prepending '하는 것이 아니라'appending'이라는 것입니다. –
글쎄, 당신은 공식적인 답변에서 역순으로 원소를 얻지, 안 그래? –