所以,我试图以这种方式转换向量x的每个元素:x [i] - > 1-(1 / X [I])
(defn change[x]
(fn [i]
(assoc x i (- 1 (/ 1 (get x i))))
)
(range 0 (* (count x) 1))
)
我使用assoc来替换向量的每个元素,我应该得到一个包含更改的向量,但我得到一个列表。
例如 使用者名称> (更改[21 32 23 34])
(0 1 2 3)
但我应该得到一个矢量:v
答案 0 :(得分:3)
您提供的函数的代码不使用本地匿名函数,并且可以进行大量重构。
这是您带注释的原始功能。
(defn change[x]
;; start unused anonymous
(fn [i]
(assoc x i (- 1 (/ 1 (get x i)))))
;; end unused anonymous
;; start/end gen list of ints
(range 0 (* (count x) 1)))
这可能是你的意思
(defn change [coll]
(mapv #(- 1 (/ 1 %)) coll))
这是输出
user> (change [21 32 23 34])
;=> [20/21 31/32 22/23 33/34]
答案 1 :(得分:1)
您的代码的作用
您的原始代码(重新格式化)
(defn change [x]
(fn [i] (assoc x i (- 1 (/ 1 (get x i)))))
(range 0 (* (count x) 1)))
range
。 因此,您可以省略fn
表单并将其缩小为
(defn change [x]
(range 0 (* (count x) 1)))
反过来减少到
(defn change [x]
(range (count x)))
所以,例如,
(change [:whatever :I :choose :to :put :here])
;(0 1 2 3 4 5)