4
나는 목록을 가지고 있으므로 컬렉션의 각 목록에 "reduce +"를 적용하고 싶습니다. 나는 "적용", "지도"및 "축소 +"를 결합해야한다고 생각하지만, 어떻게 이해할 수는 없습니다. 예 : [[1 2 3] [4 5 3] [2 5 1]] => [6 12 8]
연속열의 각 요소에 대한 감소 적용
나는 목록을 가지고 있으므로 컬렉션의 각 목록에 "reduce +"를 적용하고 싶습니다. 나는 "적용", "지도"및 "축소 +"를 결합해야한다고 생각하지만, 어떻게 이해할 수는 없습니다. 예 : [[1 2 3] [4 5 3] [2 5 1]] => [6 12 8]
연속열의 각 요소에 대한 감소 적용
apply
은 필요하지 않습니다. map
및 reduce
는 잘 작동합니다 :
(map (partial reduce +) [[1 2 3] [4 5 3] [2 5 1]])
map
각 목록의 구성원과 partial
에있는 함수를 호출합니다 단순히 하나 개의 매개 변수를 기대 감소의 '카레'버전을 만듭니다. 또한 당신이 실제로뿐만 아니라 (그냥 모두) 여기 감소의 장소에 적용 사용할 수 #(reduce + %)
또는 (fn [lst] (reduce + lst))
업데이트
과 같이 작성할 수 있습니다 :
(map (partial apply +) [[1 2 3] [4 5 3] [2 5 1]])
또한 업데이트
성능 문제가있는 경우 @AlexMiller의 유용한 팁에 대한이 답변의 의견을 참조하십시오.
이 두 가지 사이에서'reduce'가 더 좋으며 특히 하위 벡터가 큰 경우에 더 빠릅니다. –
@AlexMiller 그 권장 사항에 동의하지 않습니다. 순간에'apply +'는'reduce +'에 위임합니다. 그래서 속도 차이는 특히 큰 벡터에 대해서는 무시할 수 있습니다. http://stackoverflow.com/a/3153643/625403에서 말한 것처럼,'apply'는 항상'reduce'에 위임 할 수있는 옵션을 가지고 있습니다 만, 줄일 수없는 몇 가지 특별한 최적화를 사용할 수 있습니다; 그 반대는 사실이 아니다. – amalloy
나는이 답안에서'apply +'를'reduce +'와 비교하는 것에 대해 이야기했다. 일반적인 경우는 아니지만 (대부분의 경우 reduce는 적용하는 것보다 명확하고 빠르다고 생각한다). 언급 한대로 여기에 오버 헤드가 적용됩니다. https://gist.github.com/puredanger/88d0491cbb4dbf8fe98b3747963d0068 –