我想知道如果我失去了一些基本的涉及矢量操縱。比方說,我有以下幾點:如何在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' _is_適當的原語,但它希望索引和值單獨傳遞,就像你已經看到的那樣。你可以像你一樣建立一系列索引值對,並使用'apply'或按照amalloy和mikera的建議遞歸地使用'reduce'執行assoc。無論如何,assoc的多索引值版本是遞歸的。我會認爲'減少'選項更習慣。 –
我認爲你的解決方案几乎是最好的。 –
當你想要做的就是專門設置一個索引而不考慮其以前的值時,'apply assoc'和'interleave'可能是最好的選擇。大多數時候,我懷疑你會想做更復雜的事情,然後這個「伎倆」根本就不起作用;這就是爲什麼我建議使用'reduce',這是更一般的。 – amalloy