내가 벡터 조작과 관련된 기본적인 것을 놓치고 있는지 궁금합니다. 의는 다음과 같은 I가 있다고 가정 해 봅시다 :Clojure에서 벡터의 일부를 어떻게 수정합니까?
(def xs [9 10 11 12 13])
(def idx [0 2])
(def values [1 3])
를 내가 matlab에에서 벡터 [1 10 3 12 13]
을 반환하려면, 내가 xs(idx) = values
를 작성합니다. Clojure에서 이것을 달성하기위한 원시적 인 방법이 있습니까? 지금 당장 다음 함수를 사용하고 있습니다 :
(defn xinto [seq idx val]
(apply assoc seq (interleave idx val)))
고마워요.
이미 제시된 제안 사항 외에는 코드를 제공 할 수 없습니다. 'assoc' _은 적절한 프리미티브이지만 이미 보았 듯이 개별적으로 전달 된 인덱스와 값을 원합니다. 당신은 인덱스 값 쌍의 시퀀스를 빌드하고'apply'를 사용하거나 amalloy와 mikera가 제안한 것처럼'reduce'를 사용하여 재귀 적으로 assoc을 수행 할 수 있습니다. 두포에서 assoc의 다중 인덱스 값 버전은 어쨌든 재귀 적입니다. 나는'reduce' 옵션을 더 관용적이라고 생각할 것이다. –
당신의 솔루션이 거의 최고라고 생각합니다. –
'apply assoc'와'interleave'는 아마도 이전 값에 상관없이 특별히 인덱스를 설정하기를 원할 때 가장 좋은 선택 일 것입니다. 나는 당신이 뭔가 더 복잡한 일을하기를 원할 것이라고 의심하는 대부분의 경우,이 "속임수"는 전혀 작동하지 않을 것입니다. 그래서'reduce'를 사용하는 것이 더 일반적입니다. – amalloy