Avi Drucker / Apr 11 2021 / Published
Remix of Clojure by
Nextjournal
Clojure Koans 4 Vectors Notebook
Hi there!
If you're new to my Clojure Koan notebooks, be aware: This entire notebook is one big spoiler which contains my answers for the Clojure Koans.
Let's get right into it!
{:deps {org.clojure/clojure {:mvn/version "1.10.1"} ;; complient is used for autocompletion ;; add your libs here (and restart the runtime to pick up changes) compliment/compliment {:mvn/version "0.3.9"}}}deps.edn
Extensible Data Notation
{:hello (clojure-version)}0.1s
Clojure
;; "You can use vectors in clojure as array-like structures"(= 1 (count [42]));; skill 4001: Get the size/length of a Clojure vector with the `count` function0.1s
Clojure
;; "You can create a vector from a list"(= [1] (vec (1)));; skill 4002: Convert a list into a vector using the `vec` function0.0s
Clojure
;; "Or from some elements"(= [nil nil] (vector nil nil));; skill 4003: Create a vector from some number of items using the `vector` function0.0s
Clojure
;; "But you can populate it with any number of elements at once"(= [1 2] (vec (1 2)))0.0s
Clojure
;; "Conjoining to a vector is different than to a list"(= [111 222 333] (conj [111 222] 333));; skill 4004: Append to the end of a vector by using `conj`;; skill 4005: Prepend to (insert at) the beginning of a list by using `conj`0.0s
Clojure
;; "You can get the first element of a vector like so"(= :peanut (first [:peanut :butter :and :jelly]));; skill 4006: Get the 0th element of a vector using the `first` function0.0s
Clojure
;; "And the last in a similar fashion"(= :jelly (last [:peanut :butter :and :jelly]));; skill 4007: Get the final element of a vector using the `last` function0.0s
Clojure
;; "Or any index if you wish"(= :jelly (nth [:peanut :butter :and :jelly] 3));; skill 4008: Get an element of a vector at any index using the `nth` function0.0s
Clojure
;; "You can also slice a vector"(= [:butter :and] (subvec [:peanut :butter :and :jelly] 1 3));; skill 4009: Splice a vector using the `subvec` function0.0s
Clojure
;; "Equality with collections is in terms of values"(= (list 1 2 3) (vector 1 2 3));; skill 4010: Compare a vector and list with the same value contents to return true.Clojure
Closing notes: Vectors and lists seem quite similar on the surface, but under the hood, they have quite a few differences. I will be updating both the notebook on lists as well as this one in the coming few days to further delve into what I have learned, such as:
Which is a sequence, a list, a vector, both, or neither?
What defines a Clojure sequence exactly?
What are some more ways to explore & test Clojure?