在clojure中,如何将函数应用于[大]向量中的选定项

Ali*_*Ali 8 matlab clojure

我有一个矢量 v

(def v [1 2 5 8 4 3 8 9 3])
Run Code Online (Sandbox Code Playgroud)

我想申请功能 myfn

(defn myfn [x] (+ 1 x))
Run Code Online (Sandbox Code Playgroud)

选择我拥有索引的项目 idx

(def idx [3 5])
Run Code Online (Sandbox Code Playgroud)

我已经看过如何在Clojure中修改矢量的一部分?这不完全是我需要的.

就像你在MATLAB中做的那样

v = [1 2 5 8 9 3];
idx = [3 5];
v(idx) = myfn(v(idx));
Run Code Online (Sandbox Code Playgroud)

man*_*nge 9

clojure中的向量是关联的,因此您可以执行以下操作: (reduce #(update-in %1 [%2] myfn) v idx)