Flip vector in clojure (noob)

Hi, I am just starting with Clojure, and I cannot change the integer vector.

;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))

Output signal

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

Can someone kindly explain to me why my-vector-reversedit is not a vector? And how can I change the contents of "my-vector"? Thanks

+4
source share
3 answers

from reverse document :

Returns the sequence of elements in coll in reverse order. Do not be lazy.

the reverse turns something into seq, that is, into a list. to return a vector, you must turn it into a vector:

(into [] (reverse [1 2 3 4])) ; =>[4 3 2 1]

"my-vector": [(14 49 29 3 66 7 60 60 34 19)] - , - seq. . , seq :

(defn generate-rands
  [x]
  (into [] (take x (repeatedly #(rand-int 100)))))
+4

, vector sorted-map rseq reverse. , .

+7

reversethe function always returns seq, not a vector. You can again convert the result to a vector with something like:(apply vector (reverse [1 2 3]))

0
source

All Articles