생성일: 2019년 11월 11일
수정일: 2023년 11월 26일
수정일: 2023년 11월 26일
4clojure - Interleave Two Seqs (39)
문제
(= (__ [1 2 3] [:a :b :c]) '(1 :a 2 :b 3 :c))
(= (__ [1 2] [3 4 5 6]) '(1 3 2 4))
(= (__ [1 2 3 4] [5]) [1 5])
(= (__ [30 20] [25 15]) [30 25 20 15])
제한 : interleave
풀이
mapcat list
mapcat이라는 함수가 단순히 map + apply + concat의 합친 함수인줄 알았는데 실제로 해보니 두 함수만 가지고는 해결이 안된다는 것을 깨닫게 되었다. 간단하게 위와같은 형태로 해결이 가능하지만, map + apply + concat으로 해결한 풀이도 추가 한다.
풀이2
#(->> (map list %1 %2)
(apply concat))
mapcat 함수를 분석 해보니
(apply concat (apply map f colls))
부분이 있었다 apply map f에 대한 의문점이 생겼었는데 이는 mapcat의 파라미터가 [f & coll]에서 오는 파라미터의 가변성에 착안한 구현이라고 생각 했다.
예를 든다면 (mapcat list [1 2 3] [:a :b :c]) 일때 내부적으로는
(apply map list [[1 2 3][:a :b :c]])
의 형태로 묶여서 들어가므로 apply가 꼭 필요하다. 예전에 알아두었던 개념이었는데 다시 상기를 하면서 정리 한다.