clojure core data structure

clojure build-in types

name example underlying java interface
Number 100 java.lang.Number
String “Rugal” java.lang.String
Boolean true, false java.lang.Boolean
Character \R java.lang.Character
Keyword :key clojure.lang.Keyword
List ‘(1 2 3), (list 1 2 3) nil
Vector [1 2 3] nil
Map {:key val :key val} java.util.Map
Set #{1 2 3} java.util.Set

primitive type

Number

1
2
3
4
5
6
7
8
9
10
1. (+)
2. (-)
3. (*)
4. (/)
5. (inc)
6. (dec)
7. (quot);aliquot
8. (rem) ;remain
9. (min)
10. (max)
CLOJURE

Strings

1
2
3
4
5
1. (str)
2. (subs string from end)
;from:inclusive, start from 0
;end: exclusive
3. (string? "test")
CLOJURE

Regular Expression Functions

1
2
1. (re-pattern "[a-z]")
2. (re-matches #"[a-zA-Z]* " "test")
CLOJURE

Boolean

1
2
3
1. (not)
2. (and)
3. (or)
CLOJURE

Characters

1
1. (char ASCII/Unicode)
CLOJURE

Keywords

1
2
1. (keyword string)
2. (keyword?)
CLOJURE

collection

Lists

List is a linked list, which is convenient in insertion and deletion, but not perform good in traverse and random indexing.
So for a list, modification, appending and conjunction is happened on the top/head of a list.

1
2
3
4
1. '(1 2 3)    ; (list) are the same
2. (peek '(1 2 3)) ;get first element of list;
3. (pop '(1 2 3)) ;returns a new list with the first item removed.
4. (conj '(1 2 3) 4) ;conjunct last parameter into mid parameter represented list
CLOJURE

vector

Vector is like an array, hence perform good in traverse, data appending and random selection, but disappointing in insertion and deletion.
So for a vector, modification, append and conjunction is happened on the tail of a vector.

1
2
3
4
5
6
7
1. (vector 1 2 3) ;convert all elements into a vector
2. (get ["first" "second" "third"] 1) ;get data of a vector by index, start from 0
3. (peek [1 2 3]) ; get data of a list by the tail
4. (conj [1 2 3] 4 5) ; conjunct other parameter into second parameter represented vector
5. (assoc [1 2 3] 1 "new value") ;return vector that replace target index with last parameter
6. (pop [1 2 3]) ;remove the last element of given vector
7. (subvec [1 2 3 4 5] start end) ;substract target vector from `start` to `end`
CLOJURE

map

very similar to an Object in OOP:

1
2
3
4
5
6
7
8
9
10
11
12
1. (def my-map {:a 1 :b 2 :c 3}) ;map definition
2. (my-map :a) ;normal map get
3. (defstruct person :first-name :last-name) ;define struct for frequently used map structure
4. (def person1 (struct-map person :first-name "Luke" :last-name "VanderHart")) ;create instance
5. (def get-first-name (accessor person :first-name)) ;define accessor for performance
6. (get-first-name person1) ;use accessor to access field
7. (assoc {:a 1 :b 2} :c 3 :d 4) ; add or replace indexed element with parameters
8. (dissoc {:a 1 :b 2 :c 3 :d 4} :a :c);remove indexed elements with target parameters
9. (merge {:a 1 :b 2} {:c 3 :d 4});merge two maps together
10. (merge-with + {:a 1 :b 2} {:b 2 :c 4});merge maps with operation
11. (keys {:a 1 :b 2 :c 3}) ;get all keys
12. (vals {:a 1 :b 2 :c 3}) ;get all values
CLOJURE

set

1
2
3
4
1. (def languages #{:java :lisp :c++})
2. (clojure.set/union #{:a :b} #{:c :d})
3. (clojure.set/intersection #{:a :b :c :d} #{:c :d :f :g})
4. (clojure.set/difference #{:a :b :c :d} #{:c :d})
CLOJURE

clojure core data structure
https://rug.al/2014/2014-06-25-clojure-core-data-structure/
Author
Rugal Bernstein
Posted on
June 25, 2014
Licensed under