Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在clojure(noob)中反转向量_Clojure - Fatal编程技术网

在clojure(noob)中反转向量

在clojure(noob)中反转向量,clojure,Clojure,嗨,我刚从Clojure开始,我无法反转整数向量 ;generate a vector of random integers (defn generate-rands [x] (vector (take x (repeatedly #(rand-int 100)))) ) ;vector of integers (def my-vector (generate-rands 10)) ;reverse the vector of integers (def my-vector-re

嗨,我刚从Clojure开始,我无法反转整数向量

;generate a vector of random integers
(defn generate-rands
  [x]
  (vector (take x (repeatedly #(rand-int 100))))
  )

;vector of integers
(def my-vector (generate-rands 10))

;reverse the vector of integers
(def my-vector-reversed (reverse my-vector))

;main
(defn main-app
  []  
  (println "My Vector: \t\t\t" my-vector)
  (println "My Vector Reversed: \t" my-vector-reversed))
输出是

=> (main-app)
My Vector:           [(14 49 29 3 66 7 60 60 34 19)]
My Vector Reversed:  [((14 49 29 3 66 7 60 60 34 19))]
nil
#'startingclojure.app/main-app

=> (vector? my-vector-reversed)
false
有人能解释一下为什么我的向量不是向量吗?我怎样才能反转“我的向量”的内容? 感谢:

按相反顺序返回coll中的项目序列。不懒惰

相反,任何东西都会变成一个序列,意思是一个列表。要获取向量,应将其转换为向量:

(into [] (reverse [1 2 3 4])) ; =>[4 3 2 1]
(defn generate-rands
  [x]
  (into [] (take x (repeatedly #(rand-int 100)))))
在你的例子中,看看你的“我的向量”:[(14 49 29 3 66 7 60 60 34 19)]-它是一个包含单个元素的向量-一个序列。所以逆转它不会改变任何事情。您应该使用相同的技术将seq转换为向量:

(into [] (reverse [1 2 3 4])) ; =>[4 3 2 1]
(defn generate-rands
  [x]
  (into [] (take x (repeatedly #(rand-int 100)))))

此外,在使用
向量
排序映射
时,最好使用
rseq
而不是
reverse
。它具有恒定的时间,因为它们被索引,并且可以有效地向任意方向移动。

reverse
函数始终返回一个
seq
,而不是一个向量。您可以再次使用以下命令将结果转换为向量:
(apply vector(反向[1 2 3]))