A Clojure Story - Collections (Lists)
Being fairly new to clojure ecosystem. I thought it would be better to be dedicating a post to each of the data structures in Clojure.
Clojure has the following data structures
;; Lists
;; Vectors
;; Hashmaps
;; Sets
These are concrete data types, which are implementation of abstract data types.
This post will try to scratch the surface of - LISTS
LISTS⌗
As the name goes, are a collection of group of values.
'(1 2 3)
; => (1 2 3)
(type ( `(1 2 3))
; => clojure.lang.PersistentList
Funny thing, by mistake I typed this in the repl.
`(1 2 3)
; => (1 2 3)
; or another way to represent lists
; I prefer the previous
(list (1 2 3))
; => (1 2 3)
(type `(1 2 3))
; => clojure.lang.Cons
Turns out ` is for denoting ‘Cons’ which is another list-like structure in LISP. The term ‘cons’ is derived from “constructing a pair”, where these pairs could then be chained together to build a list. Will dig in deep for more about it
Operations on LISTS⌗
Lists are comparable
(= '(1 2 3) '(1 2 3))
; => true
We can modify lists by conjoing on it, this operation adds the element to the front of the list Because lists function as a singly linked list in clojure, insertion of an element occurs at the front of the list.
'(1 2 3)
; => (1 2 3)
(type ( `(1 2 3))
; => clojure.lang.PersistentList
(conj '(1 2 3) 4)
; => (4 1 2 3)
;; first element of the list
(first '(1 2 3))
; => 1
;; second element of the list
(second '(1 2 3))
; => 2
;; last element of the list
(last '(1 2 3))
; => 3
;; nth get the element from the given index beginning with 0
(nth '(1 2 3) 2)
; => 3
Lists are suitable for small collections and can be slow in getting elements.
For faster access to every element we would look at VECTORS
(or Arrays as we know) in the next post.