vector - 为什么我得到的是列表而不是向量?

标签 vector clojure functional-programming lisp

因此,我尝试以这种方式转换向量 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

最佳答案

您提供的函数代码没有使用本地匿名函数,可以大大重构。

这是带有注释的原始函数。

(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]

关于vector - 为什么我得到的是列表而不是向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27141447/

相关文章:

c++ - vector::insert 段错误

Java打印 vector 的输入并删除具有特定编号的 vector

clojure - 多行 Clojure 文档字符串

clojure - 在 Clojure 中计算向量中的唯一值

haskell - Haskell中有态射吗?

haskell - Applicative (Functor) 类型类的简单概括;构造函数的模式匹配

c++ - vector<string> 可以容纳多少数据?

c++ - 递归期间数组的行为

clojure - core.match 中的谓词函数调度

scala - Scala 中的定点