Function details
                                
                                    
                                    !=
                                     
                                    
                                        Returns true if both operands do not have the equivalent type
                                    
                                    
                                        (!= 0 1)
=> true
(!= 0 0)
=> false
(!= 0 0.0)
=> true
                                    
                                 
                                
                                    
                                    #{}
                                     
                                    
                                        Creates a set.
                                    
                                    
                                        #{10 20 30}
=> #{10 20 30}
                                    
                                 
                                
                                    
                                    ()
                                     
                                    
                                        Creates a list.
                                    
                                    
                                        '(10 20 30)
=> (10 20 30)
                                    
                                 
                                
                                    
                                    *
                                     
                                        
                                         (*)(* x)(* x y)(* x y & more)                          
                                        
                                     
                                    
                                        Returns the product of numbers. (*) returns 1
                                    
                                    
                                        (*)
=> 1
(* 4)
=> 4
(* 4 3)
=> 12
(* 4 3 2)
=> 24
(* (int 4) (int 3))
=> 12I
(* 6.0 2)
=> 12.0
(* 6 1.5M)
=> 9.0M
                                    
                                 
                                
                                    
                                    +
                                     
                                        
                                         (+)(+ x)(+ x y)(+ x y & more)                          
                                        
                                     
                                    
                                        Returns the sum of the numbers. (+) returns 0.
                                    
                                    
                                        (+)
=> 0
(+ 1)
=> 1
(+ 1 2)
=> 3
(+ 1 2 3 4)
=> 10
(+ (int 1) (int 2))
=> 3I
(+ 1 2.5)
=> 3.5
(+ 1 2.5M)
=> 3.5M
                                    
                                 
                                
                                    
                                    -
                                     
                                        
                                         (- x)(- x y)(- x y & more)                          
                                        
                                     
                                    
                                        If one number is supplied, returns the negation, else subtracts the numbers from x and returns the result.
                                    
                                    
                                        (- 4)
=> -4
(- 8 3 -2 -1)
=> 8
(- (int 5) (int 2))
=> 3I
(- 8 2.5)
=> 5.5
(- 8 1.5M)
=> 6.5M
                                    
                                 
                                
                                    
                                    -<>
                                     
                                    
                                        Threads the x through the forms. Inserts x at position of the <> symbol of the first form, making a list of it if is not a list already. If there are more forms, inserts the first form at position of the <> symbol in second form, etc.
                                    
                                    
                                        (-<> 5
     (+ <> 3)
     (/ 2 <>)
     (- <> 1))
=> -1
                                    
                                 
                                
                                    
                                    ->
                                     
                                    
                                        Threads the x through the forms. Inserts x as the second item in the first form, making a list of it if it is not a list already. If there are more forms, inserts the first form as the second item in second form, etc.
                                    
                                    
                                        (-> 5 (+ 3) (/ 2) (- 1))
=> 3
(do
   (def person
        {:name "Peter Meier"
         :address {:street "Lindenstrasse 45"
                   :city "Bern"
                   :zip 3000}})
   (-> person :address :street)) 
=> "Lindenstrasse 45"
                                    
                                 
                                
                                    
                                    ->>
                                     
                                    
                                        Threads the x through the forms. Inserts x as the last item in the first form, making a list of it if it is not a list already. If there are more forms, inserts the first form as the last item in second form, etc.
                                    
                                    
                                        (->> 5 (+ 3) (/ 32) (- 1))
=> -3
(->> [ {:a 1 :b 2} {:a 3 :b 4} {:a 5 :b 6} {:a 7 :b 8} ]
     (map (fn [x] (get x :b)))
     (filter (fn [x] (> x 4)))
     (map inc)))) 
=> (7 9)
                                    
                                 
                                
                                    
                                    .
                                     
                                        
                                         (. classname :new args)(. classname method-name args)(. classname field-name)(. classname :class)(. object method-name args)(. object field-name)(. object :class)                          
                                        
                                     
                                    
                                        Java interop. Calls a constructor or an class/object method or accesses a class/instance field. The function is sandboxed.
                                    
                                    
                                        ;; invoke constructor 
(. :java.lang.Long :new 10)
=> 10
;; invoke static method 
(. :java.time.ZonedDateTime :now)
=> 2019-06-24T19:37:51.775+02:00[Europe/Zurich]
;; invoke static method 
(. :java.lang.Math :min 10 20)
=> 10
;; access static field 
(. :java.lang.Math :PI)
=> 3.141592653589793
;; invoke method 
(. (. :java.lang.Long :new 10) :toString)
=> "10"
;; get class name 
(. :java.lang.Math :class)
=> class java.lang.Math
;; get class name 
(. (. :java.io.File :new "/temp") :class)
=> class java.io.File
                                    
                                 
                                
                                    
                                    /
                                     
                                        
                                         (/ x)(/ x y)(/ x y & more)                          
                                        
                                     
                                    
                                        If no denominators are supplied, returns 1/numerator, else returns numerator divided by all of the denominators.
                                    
                                    
                                        (/ 2.0)
=> 0.5
(/ 12 2 3)
=> 2
(/ 12 3)
=> 4
(/ (int 12) (int 3))
=> 4I
(/ 6.0 2)
=> 3.0
(/ 6 1.5M)
=> 4.0000000000000000M
                                    
                                 
                                
                                    
                                    <
                                     
                                    
                                        Returns true if x is smaller than y
                                    
                                    
                                        (< 2 3)
=> true
(< 2 3.0)
=> true
(< 2 3.0M)
=> true
                                    
                                 
                                
                                    
                                    <=
                                     
                                    
                                        Returns true if x is smaller or equal to y
                                    
                                    
                                        (<= 2 3)
=> true
(<= 3 3)
=> true
(<= 2 3.0)
=> true
(<= 2 3.0M)
=> true
                                    
                                 
                                
                                    
                                    ==
                                     
                                    
                                        Returns true if both operands have the equivalent type
                                    
                                    
                                        (== 0 0)
=> true
(== 0 1)
=> false
(== 0 0.0)
=> false
                                    
                                 
                                
                                    
                                    >
                                     
                                    
                                        Returns true if x is greater than y
                                    
                                    
                                        (> 3 2)
=> true
(> 3 3)
=> false
(> 3.0 2)
=> true
(> 3.0M 2)
=> true
                                    
                                 
                                
                                    
                                    >=
                                     
                                    
                                        Returns true if x is greater or equal to y
                                    
                                    
                                        (>= 3 2)
=> true
(>= 3 3)
=> true
(>= 3.0 2)
=> true
(>= 3.0M 2)
=> true
                                    
                                 
                                
                                    
                                    []
                                     
                                    
                                        Creates a vector.
                                    
                                    
                                        [10 20 30]
=> [10 20 30]
                                    
                                 
                                
                                    
                                    abs
                                     
                                    
                                        Returns the absolute value of the number
                                    
                                    
                                        (abs 10)
=> 10
(abs -10)
=> 10
(abs (int -10))
=> 10I
(abs -10.1)
=> 10.1
(abs -10.12M)
=> 10.12M
                                    
                                 
                                
                                    
                                    acopy
                                     
                                        
                                         (acopy src src-pos dest dest-pos dest-len)                          
                                        
                                     
                                    
                                        Copies an array from the src array, beginning at the specified position, to the specified position of the dest array. Returns the modified destination array
                                    
                                    
                                        (acopy (long-array '(1 2 3 4 5)) 2 (long-array 20) 10 3)
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0]
                                    
                                 
                                
                                    
                                    add-watch
                                     
                                    
                                        Adds a watch function to an agent/atom reference. The watch fn must be a fn of 4 args: a key, the reference, its old-state, its new-state.
                                    
                                    
                                        (do                                      
   (def x (agent 10))                    
   (defn watcher [key ref old new]       
         (println "watcher: " key))    
   (add-watch x :test watcher))            
=> nil
                                    
                                 
                                
                                    
                                    agent
                                     
                                    
                                        Creates and returns an agent with an initial value of state and zero or more options. 
Options: 
  :error-handler handler-fn 
  :error-mode mode-keyword 
The handler-fn is called if an action throws an exception. It's afunction taking two args the agent and the exception. The mode-keyword may be either :continue (the default) or :fail
                                    
                                    
                                        (do                         
   (def x (agent 100))      
   (send x + 5)             
   (sleep 100)              
   (deref x))                 
=> 105
                                    
                                 
                                
                                    
                                    agent-error
                                     
                                    
                                        Returns the exception thrown during an asynchronous action of the agent if the agent is failed. Returns nil if the agent is not failed.
                                    
                                    
                                        (do                                              
   (def x (agent 100 :error-mode :fail))         
   (send x (fn [n] (/ n 0)))                     
   (sleep 500)                                   
   (agent-error x))                                
=> com.github.jlangch.venice.VncException: / by zero
                                    
                                 
                                
                                    
                                    aget
                                     
                                    
                                        Returns the value at the index of an array of Java Objects
                                    
                                    
                                        (aget (long-array '(1 2 3 4 5)) 1)
=> 2
                                    
                                 
                                
                                    
                                    alength
                                     
                                    
                                        Returns the length of an array
                                    
                                    
                                        (alength (long-array '(1 2 3 4 5)))
=> 5
                                    
                                 
                                
                                    
                                    amap
                                     
                                    
                                        Applys f to each item in the array arr. Returns a new array with the mapped values.
                                    
                                    
                                        (str (amap (fn [x] (+ 1 x)) (long-array 6 0)))
=> "[1, 1, 1, 1, 1, 1]"
                                    
                                 
                                
                                    
                                    and
                                     
                                    
                                        Ands the predicate forms
                                    
                                    
                                        (and true true)
=> true
(and true false)
=> false
                                    
                                 
                                
                                    
                                    any?
                                     
                                    
                                        Returns true if the predicate is true for at least one collection item, false otherwise
                                    
                                    
                                        (any? number? nil)
=> false
(any? number? [])
=> false
(any? number? [1 :a :b])
=> true
(any? number? [1 2 3])
=> true
(any? #(>= % 10) [1 5 10])
=> true
                                    
                                 
                                
                                    
                                    apply
                                     
                                    
                                        Applies f to all arguments composed of args and coll
                                    
                                    
                                        (apply + [1 2 3])
=> 6
(apply + 1 2 [3 4 5])
=> 15
(apply str [1 2 3 4 5])
=> "12345"
                                    
                                 
                                
                                    
                                    as->
                                     
                                    
                                        Binds name to expr, evaluates the first form in the lexical context of that binding, then binds name to that result, repeating for each successive form, returning the result of the last form. This allows a value to thread into any argument position.
                                    
                                    
                                        ;allows to use arbitrary positioning of the argument
(as-> [:foo :bar] v
      (map name v)
      (first v)
      (str/subs v 1))
=> "oo"
;allows the use of if statements in the thread
(as-> {:a 1 :b 2} m
      (update m :a #(+ % 10))
      (if true
        (update m :b #(+ % 10))
         m))
=> {:a 11 :b 12}
                                    
                                 
                                
                                    
                                    aset
                                     
                                    
                                        Sets the value at the index of an array
                                    
                                    
                                        (aset (long-array '(1 2 3 4 5)) 1 20)
=> [1, 20, 3, 4, 5]
                                    
                                 
                                
                                    
                                    assert
                                     
                                        
                                         (assert expr)(assert expr message)                          
                                        
                                     
                                    
                                        Evaluates expr and throws an exception if it does not evaluate to logical true.
                                    
                                    
                                        
                                 
                                
                                    
                                    assoc
                                     
                                        
                                         (assoc coll key val)(assoc coll key val & kvs)                          
                                        
                                     
                                    
                                        When applied to a map, returns a new map of the same type, that contains the mapping of key(s) to val(s). When applied to a vector, returns a new vector that contains val at index. Note - index must be <= (count vector).
                                    
                                    
                                        (assoc {} :a 1 :b 2)
=> {:a 1 :b 2}
(assoc nil :a 1 :b 2)
=> {:a 1 :b 2}
(assoc [1 2 3] 0 10)
=> [10 2 3]
(assoc [1 2 3] 3 10)
=> [1 2 3 10]
                                    
                                 
                                
                                    
                                    assoc!
                                     
                                        
                                         (assoc! coll key val)(assoc! coll key val & kvs)                          
                                        
                                     
                                    
                                        Associates key/vals with a mutable map, returns the map
                                    
                                    
                                        (assoc! (mutable-map ) :a 1 :b 2)
=> {:a 1 :b 2}
(assoc! nil :a 1 :b 2)
=> {:a 1 :b 2}
                                    
                                 
                                
                                    
                                    assoc-in
                                     
                                    
                                        Associates a value in a nested associative structure, where ks is a sequence of keys and v is the new value and returns a new nested structure. If any levels do not exist, hash-maps or vectors will be created.
                                    
                                    
                                        (do
   (def users [{:name "James" :age 26}  {:name "John" :age 43}])
   (assoc-in users [1 :age] 44))
=> [{:age 26 :name "James"} {:age 44 :name "John"}]
(do
   (def users [{:name "James" :age 26}  {:name "John" :age 43}])
   (assoc-in users [2] {:name "Jack" :age 19}) )
=> [{:age 26 :name "James"} {:age 43 :name "John"} {:age 19 :name "Jack"}]
                                    
                                 
                                
                                    
                                    asub
                                     
                                    
                                        Returns a sub array
                                    
                                    
                                        (asub (long-array '(1 2 3 4 5)) 2 3)
=> [3, 4, 5]
                                    
                                 
                                
                                    
                                    atom
                                     
                                    
                                        Creates an atom with the initial value x
                                    
                                    
                                        (do
   (def counter (atom 0))
   (deref counter))
=> 0
                                    
                                 
                                
                                    
                                    atom?
                                     
                                    
                                        Returns true if x is an atom, otherwise false
                                    
                                    
                                        (do
   (def counter (atom 0))
   (atom? counter))
=> true
                                    
                                 
                                
                                    
                                    await
                                     
                                    
                                        Blocks the current thread (indefinitely) until all actions dispatched thus far (from this thread or agent) to the agents have occurred. 
                                    
                                    
                                        (do                           
   (def x1 (agent 100))       
   (def x2 (agent 100))       
   (await x1 x2))               
=> true
                                    
                                 
                                
                                    
                                    await-for
                                     
                                        
                                         (await-for timeout-ms agents)                          
                                        
                                     
                                    
                                        Blocks the current thread until all actions dispatched thus far (from this thread or agent) to the agents have occurred, or the timeout (in milliseconds) has elapsed. Returns logical false if returning due to timeout, logical true otherwise.
                                    
                                    
                                        (do                           
   (def x1 (agent 100))       
   (def x2 (agent 100))       
   (await-for 500 x1 x2))       
=> true
                                    
                                 
                                
                                    
                                    await-termination-agents
                                     
                                    
                                        Blocks until all actions have completed execution after a shutdown request, or the timeout occurs, or the current thread is interrupted, whichever happens first.
                                    
                                    
                                        (do                                   
   (def x1 (agent 100))               
   (def x2 (agent 100))               
   (shutdown-agents )                 
   (await-termination-agents 1000))     
                                    
                                 
                                
                                    
                                    await-termination-agents?
                                     
                                        
                                         (await-termination-agents?)                          
                                        
                                     
                                    
                                        Returns true if all tasks have been completed following agent shut down
                                    
                                    
                                        (do                                  
   (def x1 (agent 100))              
   (def x2 (agent 100))              
   (shutdown-agents )                
   (await-termination-agents 1000))  
   (sleep 300)                       
   (await-termination-agents? ))      
                                    
                                 
                                
                                    
                                    binding
                                     
                                        
                                         (binding [bindings*] exprs*)                          
                                        
                                     
                                    
                                        Evaluates the expressions and binds the values to dynamic (thread-local) symbols
                                    
                                    
                                        (do                      
   (binding [x 100]      
      (println x)        
      (binding [x 200]   
         (println x))    
      (println x)))        
100
200
100
=> nil
                                    
                                 
                                
                                    
                                    boolean
                                     
                                    
                                        Converts to boolean. Everything except 'false' and 'nil' is true in boolean context.
                                    
                                    
                                        (boolean false)
=> false
(boolean true)
=> true
(boolean nil)
=> false
                                    
                                 
                                
                                    
                                    boolean?
                                     
                                    
                                        Returns true if n is a boolean
                                    
                                    
                                        (boolean? true)
=> true
(boolean? false)
=> true
(boolean? nil)
=> false
(boolean? 0)
=> false
                                    
                                 
                                
                                    
                                    butlast
                                     
                                    
                                        Returns a collection with all but the last list element
                                    
                                    
                                        (butlast nil)
=> nil
(butlast [])
=> []
(butlast [1])
=> []
(butlast [1 2 3])
=> [1 2]
(butlast '())
=> ()
(butlast '(1))
=> ()
(butlast '(1 2 3))
=> (1 2)
                                    
                                 
                                
                                    
                                    bytebuf
                                     
                                    
                                        Converts to bytebuf. x can be a bytebuf, a list/vector of longs, or a string
                                    
                                    
                                        (bytebuf [0 1 2])
=> [0 1 2]
(bytebuf '(0 1 2))
=> [0 1 2]
(bytebuf "abc")
=> [97 98 99]
                                    
                                 
                                
                                    
                                    bytebuf-from-string
                                     
                                        
                                         (bytebuf-from-string s encoding)                          
                                        
                                     
                                    
                                        Converts a string to a bytebuf using an optional encoding. The encoding defaults to :UTF-8
                                    
                                    
                                        (bytebuf-from-string "abcdef" :UTF-8)
=> [97 98 99 100 101 102]
                                    
                                 
                                
                                    
                                    bytebuf-sub
                                     
                                        
                                         (bytebuf-sub x start) (bytebuf-sub x start end)                          
                                        
                                     
                                    
                                        Returns a byte buffer of the items in buffer from start (inclusive) to end (exclusive). If end is not supplied, defaults to (count bytebuffer)
                                    
                                    
                                        (bytebuf-sub (bytebuf [1 2 3 4 5 6]) 2)
=> [3 4 5 6]
(bytebuf-sub (bytebuf [1 2 3 4 5 6]) 4)
=> [5 6]
                                    
                                 
                                
                                    
                                    bytebuf-to-string
                                     
                                        
                                         (bytebuf-to-string buf encoding)                          
                                        
                                     
                                    
                                        Converts a bytebuf to a string using an optional encoding. The encoding defaults to :UTF-8
                                    
                                    
                                        (bytebuf-to-string (bytebuf [97 98 99]) :UTF-8)
=> "abc"
                                    
                                 
                                
                                    
                                    bytebuf?
                                     
                                    
                                        Returns true if x is a bytebuf
                                    
                                    
                                        (bytebuf? (bytebuf [1 2]))
=> true
(bytebuf? [1 2])
=> false
(bytebuf? nil)
=> false
                                    
                                 
                                
                                    
                                    callstack
                                     
                                    
                                        Returns the current callstack.
                                    
                                    
                                        (do                             
   (defn f1 [x] (f2 x))         
   (defn f2 [x] (f3 x))         
   (defn f3 [x] (f4 x))         
   (defn f4 [x] (callstack))    
   (f1 100))                      
=> [{:fn-name "callstack" :file "example" :line 5 :col 18} {:fn-name "f4" :file "example" :line 4 :col 18} {:fn-name "f3" :file "example" :line 3 :col 18} {:fn-name "f2" :file "example" :line 2 :col 18} {:fn-name "f1" :file "example" :line 6 :col 5}]
                                    
                                 
                                
                                    
                                    case
                                     
                                    
                                        Takes an expression and a set of clauses. Each clause takes the form of test-constant result-expr
                                    
                                    
                                        (case (+ 1 9)
   10  :ten
   20  :twenty
   30  :thirty
   :dont-know)
=> :ten
                                    
                                 
                                
                                    
                                    coalesce
                                     
                                    
                                        Returns the first non nil arg
                                    
                                    
                                        (coalesce )
=> nil
(coalesce 1 2)
=> 1
(coalesce nil)
=> nil
(coalesce nil 1 2)
=> 1
                                    
                                 
                                
                                    
                                    coll?
                                     
                                    
                                        Returns true if obj is a collection
                                    
                                    
                                        (coll? {:a 1})
=> true
(coll? [1 2])
=> true
                                    
                                 
                                
                                    
                                    comment
                                     
                                    
                                        Ignores body, yields nil
                                    
                                    
                                        (comment
   (println 1)
   (println 5))
=> nil
                                    
                                 
                                
                                    
                                    comp
                                     
                                    
                                        Takes a set of functions and returns a fn that is the composition of those fns. The returned fn takes a variable number of args, applies the rightmost of fns to the args, the next fn (right-to-left) to the result, etc. 
                                    
                                    
                                        ((comp str +) 8 8 8)
=> "24"
(map (comp - (partial + 3) (partial * 2)) [1 2 3 4])
=> (-5 -7 -9 -11)
((reduce comp [(partial + 1) (partial * 2) (partial + 3)]) 100)
=> 207
(filter (comp not zero?) [0 1 0 2 0 3 0 4])
=> [1 2 3 4]
(do 
   (def fifth (comp first rest rest rest rest)) 
   (fifth [1 2 3 4 5]))
=> 5
                                    
                                 
                                
                                    
                                    compare
                                     
                                    
                                        Comparator. Returns -1, 0, or 1 when x is logically 'less than', 'equal to', or 'greater than' y. For list and vectors the longer sequence is always 'greater' regardless of its contents. For sets and maps only the size of the collection is compared.
                                    
                                    
                                        (compare nil 0)
=> -1
(compare 0 nil)
=> 1
(compare 1 0)
=> 1
(compare 1 1)
=> 0
(compare 1M 2M)
=> -1
(compare 1 nil)
=> 1
(compare nil 1)
=> -1
(compare "aaa" "bbb")
=> -1
(compare [0 1 2] [0 1 2])
=> 0
(compare [0 1 2] [0 9 2])
=> -1
(compare [0 9 2] [0 1 2])
=> 1
(compare [1 2 3] [0 1 2 3])
=> -1
(compare [0 1 2] [3 4])
=> 1
                                    
                                 
                                
                                    
                                    compare-and-set!
                                     
                                        
                                         (compare-and-set! atom oldval newval)                          
                                        
                                     
                                    
                                        Atomically sets the value of atom to newval if and only if the current value of the atom is identical to oldval. Returns true if set happened, else false
                                    
                                    
                                        (do
   (def counter (atom 2))
   (compare-and-set! counter 2 4)
   (deref counter))
=> 4
                                    
                                 
                                
                                    
                                    concat
                                     
                                        
                                         (concat coll)(concat coll & colls)                          
                                        
                                     
                                    
                                        Returns a collection of the concatenation of the elements in the supplied colls.
                                    
                                    
                                        (concat [1 2])
=> (1 2)
(concat [1 2] [4 5 6])
=> (1 2 4 5 6)
(concat '(1 2))
=> (1 2)
(concat '(1 2) [4 5 6])
=> (1 2 4 5 6)
(concat {:a 1})
=> ([:a 1])
(concat {:a 1} {:b 2 :c 3})
=> ([:a 1] [:b 2] [:c 3])
(concat "abc")
=> ("a" "b" "c")
(concat "abc" "def")
=> ("a" "b" "c" "d" "e" "f")
                                    
                                 
                                
                                    
                                    cond
                                     
                                    
                                        Takes a set of test/expr pairs. It evaluates each test one at a time. If a test returns logical true, cond evaluates and returns the value of the corresponding expr and doesn't evaluate any of the other tests or exprs. (cond) returns nil.
                                    
                                    
                                        (let [n 5]
     (cond
        (< n 0) "negative"
        (> n 0) "positive"
        :else "zero"))
=> "positive"
                                    
                                 
                                
                                    
                                    conj
                                     
                                        
                                         (conj coll x)(conj coll x & xs)                          
                                        
                                     
                                    
                                        Returns a new collection with the x, xs 'added'. (conj nil item) returns (item).  The 'addition' may happen at different 'places' depending on the concrete type.
                                    
                                    
                                        (conj [1 2 3] 4)
=> [1 2 3 4]
(conj '(1 2 3) 4)
=> (4 1 2 3)
(conj (set 1 2 3) 4)
=> #{1 2 3 4}
                                    
                                 
                                
                                    
                                    cons
                                     
                                    
                                        Returns a new collection where x is the first element and coll is the rest
                                    
                                    
                                        (cons 1 '(2 3 4 5 6))
=> (1 2 3 4 5 6)
(cons [1 2] [4 5 6])
=> [[1 2] 4 5 6]
(cons 3 (set 1 2))
=> #{1 2 3}
                                    
                                 
                                
                                    
                                    contains?
                                     
                                    
                                        Returns true if key is present in the given collection, otherwise returns false.
                                    
                                    
                                        (contains? {:a 1 :b 2} :a)
=> true
(contains? [10 11 12] 1)
=> true
(contains? [10 11 12] 5)
=> false
(contains? "abc" 1)
=> true
(contains? "abc" 5)
=> false
                                    
                                 
                                
                                    
                                    count
                                     
                                    
                                        Returns the number of items in the collection. (count nil) returns 0. Also works on strings, and Java Collections
                                    
                                    
                                        (count {:a 1 :b 2})
=> 2
(count [1 2])
=> 2
(count "abc")
=> 3
                                    
                                 
                                
                                    
                                    crypt/decrypt
                                     
                                        
                                         (crypt/decrypt algorithm passphrase & options)                          
                                        
                                     
                                    
                                        Returns a new function to decrypt a string or a bytebuf given the algorithm and passphrase. If a string is passed it is base64 decoded, decrypted, and returned as string. If a bytebuf is passed the decrypted bytebuf is returned.
Supported algorithms: "DES", "3DES", "AES256"
Options:
  :url-safe enabled
      The boolean option directs the base64 decoder to decode
      standard or  URL safe base64 encoded strings.
      If enabled (true) the base64 decoder will convert '-' and '_'
      characters back to '+' and '/' before decoding.
      Defaults to false.
                                    
                                    
                                        (do
  (load-module :crypt)
  (def decrypt (crypt/encrypt "3DES" "secret" :url-safe true))
  (decrypt "ndmW1NLsDHA") ; => "hello"
  (decrypt "KPYjndkZ8vM") ; => "world"
  (decrypt  (bytebuf [234 220 237 189 12 176 242 147]))) 
=> [192 19 255 241 144 162 159 77 53 176 196 254 163 194 211 219]
                                    
                                 
                                
                                    
                                    crypt/encrypt
                                     
                                        
                                         (crypt/encrypt algorithm passphrase & options)                          
                                        
                                     
                                    
                                        Returns a new function to encrypt a string or a bytebuf given the algorithm and passphrase. If a string is passed it is encrypted and returned as a base64 encoded string. If a bytebuf is passed the encryped bytebuf is returned.
Supported algorithms: "DES", "3DES", "AES256"
Options:
  :url-safe enabled
      The boolean option directs the base64 encoder to emit
      standard or URL safe base64 enoded strings.
      If enabled (true) the base64 encoder will emit '-' and '_'
      instead of the usual '+' and '/' characters.
      Defaults to false.
      Note: no padding is added when encoding using the
            URL-safe alphabet.
                                    
                                    
                                        (do
  (load-module :crypt)
  (def encrypt (crypt/encrypt "3DES" "secret" :url-safe true))
  (encrypt "hello") ; => "ndmW1NLsDHA"
  (encrypt "world") ; => "KPYjndkZ8vM"
  (encrypt (bytebuf [1 2 3 4 5]))) 
=> [234 220 237 189 12 176 242 147]
                                    
                                 
                                
                                    
                                    crypt/md5-hash
                                     
                                    
                                        Hashes a string or a bytebuf using MD5. Note: MD5 is not safe any more use PBKDF2.
                                    
                                    
                                        (do
  (load-module :crypt)
  (str/bytebuf-to-hex
    (crypt/md5-hash "hello world")
    :upper)) 
=> "5EB63BBBE01EEED093CB22BB8F5ACDC3"
                                    
                                 
                                
                                    
                                    crypt/pbkdf2-hash
                                     
                                        
                                         (crypt/pbkdf2-hash text salt)(crypt/pbkdf2-hash text salt iterations key-length)                          
                                        
                                     
                                    
                                        Hashes a string using PBKDF2. iterations default to 1000, key-length defaults to 256
                                    
                                    
                                        (do
  (load-module :crypt)
  (str/bytebuf-to-hex
    (crypt/pbkdf2-hash "hello world" "-salt-")
    :upper)) 
=> "54F2B4411E8817C2A0743B2A7DD7EAE5AA3F748D1DDDCE00766380914AFFE995"
(do
  (load-module :crypt)
  (str/bytebuf-to-hex
    (crypt/pbkdf2-hash "hello world" "-salt-" 1000 256)
    :upper)) 
=> "54F2B4411E8817C2A0743B2A7DD7EAE5AA3F748D1DDDCE00766380914AFFE995"
                                    
                                 
                                
                                    
                                    crypt/sha512-hash
                                     
                                        
                                         (crypt/sha512-hash data)(crypt/sha512-hash data salt)                          
                                        
                                     
                                    
                                        Hashes a string or a bytebuf using SHA512 with an optional salt.
                                    
                                    
                                        (do
  (load-module :crypt)
  (str/bytebuf-to-hex
    (crypt/sha512-hash "hello world")
    :upper)) 
=> "309ECC489C12D6EB4CC40F50C902F2B4D0ED77EE511A7C7A9BCD3CA86D4CD86F989DD35BC5FF499670DA34255B45B0CFD830E81F605DCF7DC5542E93AE9CD76F"
(do
  (load-module :crypt)
  (str/bytebuf-to-hex
    (crypt/sha512-hash "hello world" "-salt-")
    :upper)) 
=> "316EBB70239D9480E91089D5D5BC6428879DF6E5CFB651B39D7AFC27DFF259418105C6D78F307FC6197531FBD37C4E8103095F186B19FC33C93D60282F3314A2"
                                    
                                 
                                
                                    
                                    current-time-millis
                                     
                                    
                                        Returns the current time in milliseconds.
                                    
                                    
                                        (current-time-millis)
=> 1561397871755
                                    
                                 
                                
                                    
                                    dec
                                     
                                    
                                        Decrements the number x
                                    
                                    
                                        (dec 10)
=> 9
(dec (int 10))
=> 9I
(dec 10.1)
=> 9.1
(dec 10.12M)
=> 9.12M
                                    
                                 
                                
                                    
                                    dec/add
                                     
                                        
                                         (dec/add x y scale rounding-mode)                          
                                        
                                     
                                    
                                        Adds two decimals and scales the result. rounding-mode is one of (:CEILING, :DOWN, :FLOOR, :HALF_DOWN, :HALF_EVEN, :HALF_UP, :UNNECESSARY, :UP)
                                    
                                    
                                        (dec/add 2.44697M 1.79882M 3 :HALF_UP)
=> 4.246M
                                    
                                 
                                
                                    
                                    dec/div
                                     
                                        
                                         (dec/div x y scale rounding-mode)                          
                                        
                                     
                                    
                                        Divides x by y and scales the result. rounding-mode is one of (:CEILING, :DOWN, :FLOOR, :HALF_DOWN, :HALF_EVEN, :HALF_UP, :UNNECESSARY, :UP)
                                    
                                    
                                        (dec/div 2.44697M 1.79882M 5 :HALF_UP)
=> 1.36032M
                                    
                                 
                                
                                    
                                    dec/mul
                                     
                                        
                                         (dec/mul x y scale rounding-mode)                          
                                        
                                     
                                    
                                        Multiplies two decimals and scales the result. rounding-mode is one of (:CEILING, :DOWN, :FLOOR, :HALF_DOWN, :HALF_EVEN, :HALF_UP, :UNNECESSARY, :UP)
                                    
                                    
                                        (dec/mul 2.44697M 1.79882M 5 :HALF_UP)
=> 4.40166M
                                    
                                 
                                
                                    
                                    dec/scale
                                     
                                        
                                         (dec/scale x scale rounding-mode)                          
                                        
                                     
                                    
                                        Scales a decimal. rounding-mode is one of (:CEILING, :DOWN, :FLOOR, :HALF_DOWN, :HALF_EVEN, :HALF_UP, :UNNECESSARY, :UP)
                                    
                                    
                                        (dec/scale 2.44697M 0 :HALF_UP)
=> 2M
(dec/scale 2.44697M 1 :HALF_UP)
=> 2.4M
(dec/scale 2.44697M 2 :HALF_UP)
=> 2.45M
(dec/scale 2.44697M 3 :HALF_UP)
=> 2.447M
(dec/scale 2.44697M 10 :HALF_UP)
=> 2.4469700000M
                                    
                                 
                                
                                    
                                    dec/sub
                                     
                                        
                                         (dec/sub x y scale rounding-mode)                          
                                        
                                     
                                    
                                        Subtract y from x and scales the result. rounding-mode is one of (:CEILING, :DOWN, :FLOOR, :HALF_DOWN, :HALF_EVEN, :HALF_UP, :UNNECESSARY, :UP)
                                    
                                    
                                        (dec/sub 2.44697M 1.79882M 3 :HALF_UP)
=> 0.648M
                                    
                                 
                                
                                    
                                    decimal
                                     
                                        
                                         (decimal x) (decimal x scale rounding-mode)                          
                                        
                                     
                                    
                                        Converts to decimal. rounding-mode is one of (:CEILING, :DOWN, :FLOOR, :HALF_DOWN, :HALF_EVEN, :HALF_UP, :UNNECESSARY, :UP)
                                    
                                    
                                        (decimal 2)
=> 2M
(decimal 2 3 :HALF_UP)
=> 2.000M
(decimal 2.5787 3 :HALF_UP)
=> 2.579M
(decimal 2.5787M 3 :HALF_UP)
=> 2.579M
(decimal "2.5787" 3 :HALF_UP)
=> 2.579M
(decimal nil)
=> 0M
                                    
                                 
                                
                                    
                                    decimal?
                                     
                                    
                                        Returns true if n is a decimal
                                    
                                    
                                        (decimal? 4.0M)
=> true
(decimal? 4.0)
=> false
(decimal? 3)
=> false
(decimal? 3I)
=> false
                                    
                                 
                                
                                    
                                    dedupe
                                     
                                    
                                        Returns a collection with all consecutive duplicates removed
                                    
                                    
                                        (dedupe [1 2 2 2 3 4 4 2 3])
=> [1 2 3 4 2 3]
(dedupe '(1 2 2 2 3 4 4 2 3))
=> (1 2 3 4 2 3)
                                    
                                 
                                
                                    
                                    def
                                     
                                    
                                        Creates a global variable.
                                    
                                    
                                        (def x 5)
=> 5
(def sum (fn [x y] (+ x y)))
=> function anonymous-d01a8037-ad35-49c6-9d69-6791da94f2a4 {visibility :public, module "example"}
                                    
                                 
                                
                                    
                                    def-dynamic
                                     
                                    
                                        Creates a dynamic variable that starts off as a global variable and can be bound with 'binding' to a new value on the local thread.
                                    
                                    
                                        (do                      
   (def-dynamic x 100)   
   (println x)           
   (binding [x 200]      
      (println x))       
   (println x)))           
100
200
100
=> nil
                                    
                                 
                                
                                    
                                    defmacro
                                     
                                        
                                         (defmacro name [params*] body)                          
                                        
                                     
                                    
                                        Macro definition
                                    
                                    
                                        (defmacro unless [pred a b]   
  `(if (not ~pred) ~a ~b))      
=> macro unless {visibility :public, module "example"}
                                    
                                 
                                
                                    
                                    defmethod
                                     
                                        
                                         (defmethod multifn-name dispatch-val & fn-tail)                          
                                        
                                     
                                    
                                        Creates a new method for a multimethod associated with a dispatch-value.
                                    
                                    
                                        (do                                                                       
   ;;defmulti with dispatch function                                      
   (defmulti salary (fn[amount] (amount :t)))                             
                                                                          
   ;;defmethod provides a function implementation for a particular value  
   (defmethod salary "com" [amount] (+ (:b amount) (/ (:b amount) 2)))  
   (defmethod salary "bon" [amount] (+ (:b amount) 99))                 
   (defmethod salary :default  [amount] (:b amount))                      
                                                                          
   [(salary {:t "com" :b 1000})                                         
    (salary {:t "bon" :b 1000})                                         
    (salary {:t "xxx" :b 1000})]                                        
)                                                                           
=> [1500 1099 1000]
                                    
                                 
                                
                                    
                                    defmulti
                                     
                                        
                                         (defmulti name dispatch-fn)                          
                                        
                                     
                                    
                                        Creates a new multimethod with the associated dispatch function.
                                    
                                    
                                        (do                                                                       
   ;;defmulti with dispatch function                                      
   (defmulti salary (fn[amount] (amount :t)))                             
                                                                          
   ;;defmethod provides a function implementation for a particular value  
   (defmethod salary "com" [amount] (+ (:b amount) (/ (:b amount) 2)))  
   (defmethod salary "bon" [amount] (+ (:b amount) 99))                 
   (defmethod salary :default  [amount] (:b amount))                      
                                                                          
   [(salary {:t "com" :b 1000})                                         
    (salary {:t "bon" :b 1000})                                         
    (salary {:t "xxx" :b 1000})]                                        
)                                                                           
=> [1500 1099 1000]
                                    
                                 
                                
                                    
                                    defn
                                     
                                        
                                         (defn name [args*] condition-map? expr*)(defn name ([args*] condition-map? expr*)+)                          
                                        
                                     
                                    
                                        Same as (def name (fn name [args*] condition-map? expr*)) or (def name (fn name ([args*] condition-map? expr*)+))
                                    
                                    
                                        (defn sum [x y] (+ x y))
=> function sum {visibility :public, module "example"}
(defn sum [x y] { :pre [(> x 0)] } (+ x y))
=> function sum {visibility :public, module "example"}
                                    
                                 
                                
                                    
                                    defn-
                                     
                                        
                                         (defn- name [args*] condition-map? expr*)(defn- name ([args*] condition-map? expr*)+)                          
                                        
                                     
                                    
                                        Same as defn, yielding non-public def
                                    
                                    
                                        (defn- sum [x y] (+ x y))
=> function sum {visibility :private, module "example"}
                                    
                                 
                                
                                    
                                    defonce
                                     
                                    
                                        Creates a global variable that can not be overwritten
                                    
                                    
                                        (defonce x 5)
=> 5
                                    
                                 
                                
                                    
                                    delay
                                     
                                    
                                        Takes a body of expressions and yields a Delay object that will invoke the body only the first time it is forced (with force or deref/@), and will cache the result and return it on all subsequent force calls
                                    
                                    
                                        (do
   (def x (delay (println "working...") 100))
   (deref x))
working...
=> 100
                                    
                                 
                                
                                    
                                    delay?
                                     
                                    
                                        Returns true if x is a Delay created with delay
                                    
                                    
                                        (do                                              
   (def x (delay (println "working...") 100))  
   (delay? x))                                     
=> true
                                    
                                 
                                
                                    
                                    deliver
                                     
                                    
                                        Delivers the supplied value to the promise, releasing any pending derefs. A subsequent call to deliver on a promise will have no effect.
                                    
                                    
                                        (do                   
   (def p (promise))  
   (deliver p 123))
=> nil
                                    
                                 
                                
                                    
                                    deref
                                     
                                        
                                         (deref x)(deref x timeout-ms timeout-val)                          
                                        
                                     
                                    
                                        Dereferences an atom or a Future object. When applied to an atom, returns its current state. When applied to a future, will block if computation not complete. The variant taking a timeout can be used for futures and will return timeout-val if the timeout (in milliseconds) is reached before a value is available. 
Also reader macro: @atom/@future/@promise.
                                    
                                    
                                        (do                             
   (def counter (atom 10))      
   (deref counter))               
=> 10
(do                             
   (def counter (atom 10))      
   @counter)                      
=> 10
(do                             
   (def task (fn [] 100))       
   (let [f (future task)]       
        (deref f)))               
=> 100
(do                             
   (def task (fn [] 100))       
   (let [f (future task)]       
        @f))                      
=> 100
(do                             
   (def task (fn [] 100))       
   (let [f (future task)]       
        (deref f 300 :timeout)))  
=> 100
(do                                              
   (def x (delay (println "working...") 100))  
   @x)                                             
working...
=> 100
                                    
                                 
                                
                                    
                                    difference
                                     
                                        
                                         (difference s1)(difference s1 s2)(difference s1 s2 & sets)                          
                                        
                                     
                                    
                                        Return a set that is the first set without elements of the remaining sets
                                    
                                    
                                        (difference (set 1 2 3))
=> #{1 2 3}
(difference (set 1 2) (set 2 3))
=> #{1}
(difference (set 1 2) (set 1) (set 1 4) (set 3))
=> #{2}
                                    
                                 
                                
                                    
                                    disj
                                     
                                        
                                         (disj coll x)(disj coll x & xs)                          
                                        
                                     
                                    
                                        Returns a new set with the x, xs removed.
                                    
                                    
                                        (disj (set 1 2 3) 3)
=> #{1 2}
                                    
                                 
                                
                                    
                                    dissoc
                                     
                                        
                                         (dissoc coll key)(dissoc coll key & ks)                          
                                        
                                     
                                    
                                        Returns a new coll of the same type, that does not contain a mapping for key(s)
                                    
                                    
                                        (dissoc {:a 1 :b 2 :c 3} :b)
=> {:a 1 :c 3}
(dissoc {:a 1 :b 2 :c 3} :c :b)
=> {:a 1}
                                    
                                 
                                
                                    
                                    dissoc!
                                     
                                        
                                         (dissoc! coll key)(dissoc! coll key & ks)                          
                                        
                                     
                                    
                                        Dissociates keys from a mutable map, returns the map
                                    
                                    
                                        (dissoc! (mutable-map :a 1 :b 2 :c 3) :b)
=> {:a 1 :c 3}
(dissoc! (mutable-map :a 1 :b 2 :c 3) :c :b)
=> {:a 1}
                                    
                                 
                                
                                    
                                    distinct
                                     
                                    
                                        Returns a collection with all duplicates removed
                                    
                                    
                                        (distinct [1 2 3 4 2 3 4])
=> [1 2 3 4]
(distinct '(1 2 3 4 2 3 4))
=> (1 2 3 4)
                                    
                                 
                                
                                    
                                    do
                                     
                                    
                                        Evaluates the expressions in order and returns the value of the last.
                                    
                                    
                                        (do (println "Test...") (+ 1 1))
Test...
=> 2
                                    
                                 
                                
                                    
                                    doc
                                     
                                    
                                        Prints documentation for a var or special form given its name
                                    
                                    
                                        (doc +)
(+), (+ x), (+ x y), (+ x y & more)
Returns the sum of the numbers. (+) returns 0.
Examples:
    (+)
    (+ 1)
    (+ 1 2)
    (+ 1 2 3 4)
    (+ (int 1) (int 2))
    (+ 1 2.5)
    (+ 1 2.5M)
=> nil
                                    
                                 
                                
                                    
                                    docoll
                                     
                                    
                                        Applies f to the items of the collection presumably for side effects. Returns nil. 
                                    
                                    
                                        (docoll #(println %) [1 2 3 4])
1
2
3
4
=> nil
(docoll 
    (fn [[k v]] (println (pr-str k v)))  
    {:a 1 :b 2 :c 3 :d 4})
:a 1
:b 2
:c 3
:d 4
=> nil
                                    
                                 
                                
                                    
                                    dorun
                                     
                                    
                                        Runs the expr count times in the most effective way. It's main purpose is supporting performance test.
                                    
                                    
                                        (dorun 10 (+ 1 1))
=> 2
                                    
                                 
                                
                                    
                                    dotimes
                                     
                                        
                                         (dotimes bindings & body)                          
                                        
                                     
                                    
                                        Repeatedly executes body with name bound to integers from 0 through n-1.
                                    
                                    
                                        (dotimes [n 3] (println (str "n is " n)))
n is 0
n is 1
n is 2
=> nil
                                    
                                 
                                
                                    
                                    doto
                                     
                                    
                                        Evaluates x then calls all of the methods and functions with the value of x supplied at the front of the given arguments. The forms are evaluated in order. Returns x.
                                    
                                    
                                        (doto (. :java.util.HashMap :new)
      (. :put :a 1)
      (. :put :b 2))
=> {"a" 1 "b" 2}
                                    
                                 
                                
                                    
                                    double
                                     
                                    
                                        Converts to double
                                    
                                    
                                        (double 1)
=> 1.0
(double nil)
=> 0.0
(double false)
=> 0.0
(double true)
=> 1.0
(double 1.2)
=> 1.2
(double 1.2M)
=> 1.2
(double "1.2")
=> 1.2
                                    
                                 
                                
                                    
                                    double-array
                                     
                                        
                                         (double-array coll)(double-array len)(double-array len init-val)                          
                                        
                                     
                                    
                                        Returns an array of Java primitive doubles containing the contents of coll or returns an array with the given length and optional init value
                                    
                                    
                                        (double-array '(1.0 2.0 3.0))
=> [1.0, 2.0, 3.0]
(double-array '(1I 2 3.2 3.56M))
=> [1.0, 2.0, 3.2, 3.56]
(double-array 10)
=> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
(double-array 10 42.0)
=> [42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0]
                                    
                                 
                                
                                    
                                    double?
                                     
                                    
                                        Returns true if n is a double
                                    
                                    
                                        (double? 4.0)
=> true
(double? 3)
=> false
(double? 3I)
=> false
(double? 3.0M)
=> false
(double? true)
=> false
(double? nil)
=> false
(double? {})
=> false
                                    
                                 
                                
                                    
                                    drop
                                     
                                    
                                        Returns a collection of all but the first n items in coll
                                    
                                    
                                        (drop 3 [1 2 3 4 5])
=> [5]
(drop 10 [1 2 3 4 5])
=> []
                                    
                                 
                                
                                    
                                    drop-while
                                     
                                        
                                         (drop-while predicate coll)                          
                                        
                                     
                                    
                                        Returns a list of the items in coll starting from the first item for which (predicate item) returns logical false.
                                    
                                    
                                        (drop-while neg? [-2 -1 0 1 2 3])
=> [0 1 2 3]
                                    
                                 
                                
                                    
                                    empty
                                     
                                    
                                        Returns an empty collection of the same category as coll, or nil
                                    
                                    
                                        (empty {:a 1})
=> {}
(empty [1 2])
=> []
(empty '(1 2))
=> ()
                                    
                                 
                                
                                    
                                    empty-to-nil
                                     
                                    
                                        Returns nil if x is empty
                                    
                                    
                                        (empty-to-nil "")
=> nil
(empty-to-nil [])
=> nil
(empty-to-nil '())
=> nil
(empty-to-nil {})
=> nil
                                    
                                 
                                
                                    
                                    empty?
                                     
                                    
                                        Returns true if x is empty
                                    
                                    
                                        (empty? {})
=> true
(empty? [])
=> true
(empty? '())
=> true
                                    
                                 
                                
                                    
                                    eval
                                     
                                    
                                        Evaluates the form data structure (not text!) and returns the result.
                                    
                                    
                                        (eval '(let [a 10] (+ 3 4 a)))
=> 17
(eval (list + 1 2 3))
=> 6
(let [s "(+ 2 x)" x 10]     
   (eval (read-string s))))     
=> 12
                                    
                                 
                                
                                    
                                    even?
                                     
                                    
                                        Returns true if n is even, throws an exception if n is not an integer
                                    
                                    
                                        (even? 4)
=> true
(even? 3)
=> false
(even? (int 3))
=> false
                                    
                                 
                                
                                    
                                    every?
                                     
                                    
                                        Returns true if the predicate is true for all collection items, false otherwise
                                    
                                    
                                        (every? number? nil)
=> false
(every? number? [])
=> false
(every? number? [1 2 3 4])
=> true
(every? number? [1 2 3 :a])
=> false
(every? #(>= % 10) [10 11 12])
=> true
                                    
                                 
                                
                                    
                                    false?
                                     
                                    
                                        Returns true if x is false, false otherwise
                                    
                                    
                                        (false? true)
=> false
(false? false)
=> true
(false? nil)
=> false
(false? 0)
=> false
(false? (== 1 2))
=> true
                                    
                                 
                                
                                    
                                    filter
                                     
                                    
                                        Returns a collection of the items in coll for which (predicate item) returns logical true. 
                                    
                                    
                                        (filter even? [1 2 3 4 5 6 7])
=> [2 4 6]
                                    
                                 
                                
                                    
                                    find
                                     
                                    
                                        Returns the map entry for key, or nil if key not present.
                                    
                                    
                                        (find {:a 1 :b 2} :b)
=> [:b 2]
(find {:a 1 :b 2} :z)
=> nil
                                    
                                 
                                
                                    
                                    first
                                     
                                    
                                        Returns the first element of coll.
                                    
                                    
                                        (first nil)
=> nil
(first [])
=> nil
(first [1 2 3])
=> 1
(first '())
=> nil
(first '(1 2 3))
=> 1
(first "abc")
=> "a"
                                    
                                 
                                
                                    
                                    flatten
                                     
                                    
                                        Takes any nested combination of collections (lists, vectors, etc.) and returns their contents as a single, flat sequence. (flatten nil) returns an empty list.
                                    
                                    
                                        (flatten [])
=> []
(flatten [[1 2 3] [4 5 6] [7 8 9]])
=> [1 2 3 4 5 6 7 8 9]
                                    
                                 
                                
                                    
                                    float-array
                                     
                                        
                                         (float-array coll)(float-array len)(float-array len init-val)                          
                                        
                                     
                                    
                                        Returns an array of Java primitive floats containing the contents of coll or returns an array with the given length and optional init value
                                    
                                    
                                        (float-array '(1.0 2.0 3.0))
=> [1.0, 2.0, 3.0]
(float-array '(1I 2 3.2 3.56M))
=> [1.0, 2.0, 3.200000047683716, 3.559999942779541]
(float-array 10)
=> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
(float-array 10 42.0)
=> [42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0, 42.0]
                                    
                                 
                                
                                    
                                    flush
                                     
                                    
                                        Without arg flushes the output stream that is the current value of *out*. With arg flushes the passed output stream
                                    
                                    
                                        (flush)
=> nil
(flush *out*)
=> nil
                                    
                                 
                                
                                    
                                    fn
                                     
                                        
                                         (fn name? [params*] condition-map? expr*)                          
                                        
                                     
                                    
                                        Defines an anonymous function.
                                    
                                    
                                        (do (def sum (fn [x y] (+ x y))) (sum 2 3))
=> 5
(map (fn double [x] (* 2 x)) (range 1 5))
=> (2 4 6 8)
(map #(* 2 %) (range 1 5))
=> (2 4 6 8)
(map #(* 2 %1) (range 1 5))
=> (2 4 6 8)
;; anonymous function with two params, the second is destructured
(reduce (fn [m [k v]] (assoc m v k)) {} {:b 2 :a 1 :c 3})
=> {1 :a 2 :b 3 :c}
;; defining a pre-condition                 
(do                                         
   (def square-root                         
        (fn [x]                             
            { :pre [(>= x 0)] }             
            (. :java.lang.Math :sqrt x)))   
   (square-root 4))                           
=> 2.0
;; higher-order function                                           
(do                                                                
   (def discount                                                   
        (fn [percentage]                                           
            { :pre [(and (>= percentage 0) (<= percentage 100))] } 
            (fn [price] (- price (* price percentage 0.01)))))     
   ((discount 50) 300))                                              
=> 150.0
                                    
                                 
                                
                                    
                                    fn?
                                     
                                    
                                        Returns true if x is a function
                                    
                                    
                                        (do 
   (def sum (fn [x] (+ 1 x)))
   (fn? sum))
=> true
                                    
                                 
                                
                                    
                                    force
                                     
                                    
                                        If x is a Delay, returns its value, else returns x
                                    
                                    
                                        (do                                              
   (def x (delay (println "working...") 100))  
   (force x))                                      
working...
=> 100
                                    
                                 
                                
                                    
                                    future
                                     
                                    
                                        Takes a function and yields a future object that will invoke the function in another thread, and will cache the result and return it on all subsequent calls to deref. If the computation has not yet finished, calls to deref will block, unless the variant of deref with timeout is used. 
Thread local vars will be inherited by the future child thread. Changes of the child's thread local vars will not be seen on the parent.
                                    
                                    
                                        (do                                          
   (def wait (fn [] (do (sleep 500) 100)))   
   (let [f (future wait)]                    
        (deref f)))                            
=> 100
;; demonstrates the use of thread locals with futures              
(do                                                                
   ;; parent thread locals                                         
   (binding [a 10 b 20]                                            
      ;; future with child thread locals                           
      (let [f (future (fn [] (binding [b 90] {:a a :b b})))]       
         {:child @f :parent {:a a :b b}})))                          
=> {:parent {:a 10 :b 20} :child {:a 10 :b 90}}
                                    
                                 
                                
                                    
                                    future-cancel
                                     
                                    
                                        Cancels the future
                                    
                                    
                                        (do                                                                     
   (def wait (fn [] (do (sleep 400) 100)))                              
   (let [f (future wait)]                                               
      (sleep 50)                                                        
      (printf "After 50ms: cancelled=%b\n" (future-cancelled? f))    
      (future-cancel f)                                                 
      (sleep 100)                                                       
      (printf "After 150ms: cancelled=%b\n" (future-cancelled? f))))   
After 50ms: cancelled=false
After 150ms: cancelled=true
=> nil
                                    
                                 
                                
                                    
                                    future-cancelled?
                                     
                                    
                                        Returns true if f is a Future is cancelled otherwise false
                                    
                                    
                                        (future-cancelled? (future (fn [] 100)))
=> false
                                    
                                 
                                
                                    
                                    future-done?
                                     
                                    
                                        Returns true if f is a Future is done otherwise false
                                    
                                    
                                        (do                                                            
   (def wait (fn [] (do (sleep 200) 100)))                     
   (let [f (future wait)]                                      
      (sleep 50)                                               
      (printf "After 50ms: done=%b\n" (future-done? f))     
      (sleep 300)                                              
      (printf "After 300ms: done=%b\n" (future-done? f))))    
After 50ms: done=false
After 300ms: done=true
=> nil
                                    
                                 
                                
                                    
                                    future?
                                     
                                    
                                        Returns true if f is a Future otherwise false
                                    
                                    
                                        (future? (future (fn [] 100)))
=> true
                                    
                                 
                                
                                    
                                    gc
                                     
                                    
                                        Run the Java garbage collector. Runs the finalization methods of any objects pending finalization prior to the GC.
                                    
                                    
                                        (gc)
=> nil
                                    
                                 
                                
                                    
                                    gensym
                                     
                                    
                                        Generates a symbol.
                                    
                                    
                                        (gensym )
=> G__3
(gensym "prefix_")
=> prefix_4
                                    
                                 
                                
                                    
                                    get
                                     
                                        
                                         (get map key)(get map key not-found)                          
                                        
                                     
                                    
                                        Returns the value mapped to key, not-found or nil if key not present.
                                    
                                    
                                        (get {:a 1 :b 2} :b)
=> 2
;; keywords act like functions on maps 
(:b {:a 1 :b 2})
=> 2
                                    
                                 
                                
                                    
                                    get-in
                                     
                                        
                                         (get-in m ks)(get-in m ks not-found)                          
                                        
                                     
                                    
                                        Returns the value in a nested associative structure, where ks is a sequence of keys. Returns nil if the key is not present, or the not-found value if supplied.
                                    
                                    
                                        (get-in {:a 1 :b {:c 2 :d 3}} [:b :c])
=> 2
(get-in [:a :b :c] [0])
=> :a
(get-in [:a :b [:c :d :e]] [2 1])
=> :d
(get-in {:a 1 :b {:c [4 5 6]}} [:b :c 1])
=> 5
                                    
                                 
                                
                                    
                                    group-by
                                     
                                    
                                        Returns a map of the elements of coll keyed by the result of f on each element. The value at each key will be a vector of the corresponding elements, in the order they appeared in coll.
                                    
                                    
                                        (group-by count ["a" "as" "asd" "aa" "asdf" "qwer"])
=> {1 ["a"] 2 ["as" "aa"] 3 ["asd"] 4 ["asdf" "qwer"]}
(group-by odd? (range 10))
=> {false [0 2 4 6 8] true [1 3 5 7 9]}
                                    
                                 
                                
                                    
                                    hash-map
                                     
                                        
                                         (hash-map & keyvals)(hash-map map)                          
                                        
                                     
                                    
                                        Creates a new hash map containing the items.
                                    
                                    
                                        (hash-map :a 1 :b 2)
=> {:a 1 :b 2}
(hash-map (sorted-map :a 1 :b 2))
=> {:a 1 :b 2}
                                    
                                 
                                
                                    
                                    hash-map?
                                     
                                    
                                        Returns true if obj is a hash map
                                    
                                    
                                        (hash-map? (hash-map :a 1 :b 2))
=> true
                                    
                                 
                                
                                    
                                    identity
                                     
                                    
                                        Returns its argument.
                                    
                                    
                                        (identity 4)
=> 4
(filter identity [1 2 3 nil 4 false true 1234])
=> [1 2 3 4 true 1234]
                                    
                                 
                                
                                    
                                    if
                                     
                                        
                                         (if test true-expr false-expr)                          
                                        
                                     
                                    
                                        Evaluates test.
                                    
                                    
                                        (if (< 10 20) "yes" "no")
=> "yes"
                                    
                                 
                                
                                    
                                    if-let
                                     
                                        
                                         (if-let bindings then)(if-let bindings then else)                          
                                        
                                     
                                    
                                        bindings is a vector with 2 elements: binding-form test. 
If test is true, evaluates then with binding-form bound to the value of test, if not, yields else
                                    
                                    
                                        (if-let [value (* 100 2)]
    (str "The expression is true. value=" value)
    (str "The expression is false."))
=> "The expression is true. value=200"
                                    
                                 
                                
                                    
                                    import
                                     
                                    
                                        Imports a Java class
                                    
                                    
                                        (do
   (import :java.lang.Long)
   (. :Long :new 10))
=> 10
                                    
                                 
                                
                                    
                                    inc
                                     
                                    
                                        Increments the number x
                                    
                                    
                                        (inc 10)
=> 11
(inc (int 10))
=> 11I
(inc 10.1)
=> 11.1
(inc 10.12M)
=> 11.12M
                                    
                                 
                                
                                    
                                    instance?
                                     
                                    
                                        Returns true if x is an instance of the given type
                                    
                                    
                                        (instance? :venice.Long 500)
=> true
(instance? :java.math.BigInteger 500)
=> false
                                    
                                 
                                
                                    
                                    int
                                     
                                    
                                        Converts to int
                                    
                                    
                                        (int 1)
=> 1I
(int nil)
=> 0I
(int false)
=> 0I
(int true)
=> 1I
(int 1.2)
=> 1I
(int 1.2M)
=> 1I
(int "1")
=> 1I
                                    
                                 
                                
                                    
                                    int-array
                                     
                                        
                                         (int-array coll)(int-array len)(int-array len init-val)                          
                                        
                                     
                                    
                                        Returns an array of Java primitive ints containing the contents of coll or returns an array with the given length and optional init value
                                    
                                    
                                        (int-array '(1I 2I 3I))
=> [1I, 2I, 3I]
(int-array '(1I 2 3.2 3.56M))
=> [1I, 2I, 3I, 3I]
(int-array 10)
=> [0I, 0I, 0I, 0I, 0I, 0I, 0I, 0I, 0I, 0I]
(int-array 10 42I)
=> [42I, 42I, 42I, 42I, 42I, 42I, 42I, 42I, 42I, 42I]
                                    
                                 
                                
                                    
                                    int?
                                     
                                    
                                        Returns true if n is an int
                                    
                                    
                                        (int? 4I)
=> true
(int? 4)
=> false
(int? 3.1)
=> false
(int? true)
=> false
(int? nil)
=> false
(int? {})
=> false
                                    
                                 
                                
                                    
                                    interleave
                                     
                                        
                                         (interleave c1 c2)(interleave c1 c2 & colls)                          
                                        
                                     
                                    
                                        Returns a collection of the first item in each coll, then the second etc.
                                    
                                    
                                        (interleave [:a :b :c] [1 2])
=> (:a 1 :b 2)
                                    
                                 
                                
                                    
                                    interpose
                                     
                                    
                                        Returns a collection of the elements of coll separated by sep.
                                    
                                    
                                        (interpose ", " [1 2 3])
=> (1 ", " 2 ", " 3)
(apply str (interpose ", " [1 2 3]))
=> "1, 2, 3"
                                    
                                 
                                
                                    
                                    intersection
                                     
                                        
                                         (intersection s1)(intersection s1 s2)(intersection s1 s2 & sets)                          
                                        
                                     
                                    
                                        Return a set that is the intersection of the input sets
                                    
                                    
                                        (intersection (set 1))
=> #{1}
(intersection (set 1 2) (set 2 3))
=> #{2}
(intersection (set 1 2) (set 3 4))
=> #{}
                                    
                                 
                                
                                    
                                    into
                                     
                                    
                                        Returns a new coll consisting of to-coll with all of the items offrom-coll conjoined.
                                    
                                    
                                        (into (sorted-map) [ [:a 1] [:c 3] [:b 2] ] )
=> {:a 1 :b 2 :c 3}
(into (sorted-map) [ {:a 1} {:c 3} {:b 2} ] )
=> {:a 1 :b 2 :c 3}
(into [] {1 2, 3 4})
=> [[1 2] [3 4]]
(into '() '(1 2 3))
=> (3 2 1)
(into [1 2 3] '(4 5 6))
=> [1 2 3 4 5 6]
(into '() (bytebuf [0 1 2]))
=> (0 1 2)
(into [] (bytebuf [0 1 2]))
=> [0 1 2]
(into '() "abc")
=> ("a" "b" "c")
(into [] "abc")
=> ["a" "b" "c"]
(into (sorted-map) {:b 2 :c 3 :a 1})
=> {:a 1 :b 2 :c 3}
(do
   (into (. :java.util.concurrent.CopyOnWriteArrayList :new)
         (doto (. :java.util.ArrayList :new)
               (. :add 3)
               (. :add 4))))
=> (3 4)
(do
   (into (. :java.util.concurrent.CopyOnWriteArrayList :new)
         '(3 4)))
=> (3 4)
                                    
                                 
                                
                                    
                                    io/copy-file
                                     
                                        
                                         (io/copy-file source dest)                          
                                        
                                     
                                    
                                        Copies source to dest. Returns nil or throws IOException. Source must be a file or a string (file path), dest must be a file, a string (file path), or an OutputStream.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/copy-stream
                                     
                                        
                                         (io/copy-file in-stream out-stream)                          
                                        
                                     
                                    
                                        Copies input stream to an output stream. Returns nil or throws IOException. Input and output must be a java.io.InputStream and java.io.OutputStream.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/default-charset
                                     
                                    
                                        Returns the default charset.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/delete-file
                                     
                                        
                                         (io/delete-file f & files)                          
                                        
                                     
                                    
                                        Deletes one or multiple files. Silently skips delete if the file does not exist. f must be a file or a string (file path)
                                    
                                    
                                        
                                 
                                
                                    
                                    io/delete-file-on-exit
                                     
                                        
                                         (io/delete-file-on-exit f)                          
                                        
                                     
                                    
                                        Deletes a file on JVM exit. f must be a file or a string (file path).
                                    
                                    
                                        
                                 
                                
                                    
                                    io/download
                                     
                                        
                                         (io/download uri & options)                          
                                        
                                     
                                    
                                        Downloads the content from the uri and reads it as text (string) or binary (bytebuf). 
Options: 
  :binary true/false - e.g :binary true, defaults to false 
  :encoding enc - e.g :encoding :utf-8, defaults to :utf-8
                                    
                                    
                                        
                                 
                                
                                    
                                    io/exists-dir?
                                     
                                    
                                        Returns true if the file f exists and is a directory. f must be a file or a string (file path).
                                    
                                    
                                        (io/exists-dir? (io/file "/temp"))
=> false
                                    
                                 
                                
                                    
                                    io/exists-file?
                                     
                                    
                                        Returns true if the file f exists. f must be a file or a string (file path).
                                    
                                    
                                        (io/exists-file? "/temp/test.txt")
=> false
                                    
                                 
                                
                                    
                                    io/file
                                     
                                        
                                         (io/file path) (io/file parent child)                          
                                        
                                     
                                    
                                        Returns a java.io.File. path, parent, may be a file or a string (file path) child must be a string
                                    
                                    
                                        (io/file "/temp/test.txt")
=> /temp/test.txt
(io/file "/temp" "test.txt")
=> /temp/test.txt
(io/file (io/file "/temp") "test.txt")
=> /temp/test.txt
(io/file (. :java.io.File :new "/temp/test.txt"))
=> /temp/test.txt
                                    
                                 
                                
                                    
                                    io/file-absolute-path
                                     
                                        
                                         (io/file-absolute-path f)                          
                                        
                                     
                                    
                                        Returns the absolute path of the file f. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-absolute-path (io/file "/tmp/test/x.txt"))
=> "/tmp/test/x.txt"
                                    
                                 
                                
                                    
                                    io/file-can-execute?
                                     
                                    
                                        Returns true if the file or directory f exists and can be executed. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-can-execute? "/temp/test.txt")
                                    
                                 
                                
                                    
                                    io/file-can-read?
                                     
                                    
                                        Returns true if the file or directory f exists and can be read. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-can-read? "/temp/test.txt")
                                    
                                 
                                
                                    
                                    io/file-can-write?
                                     
                                    
                                        Returns true if the file or directory f exists and can be written. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-can-write? "/temp/test.txt")
                                    
                                 
                                
                                    
                                    io/file-canonical-path
                                     
                                        
                                         (io/file-canonical-path f)                          
                                        
                                     
                                    
                                        Returns the canonical path of the file f. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-canonical-path (io/file "/tmp/test/../x.txt"))
=> "/private/tmp/x.txt"
                                    
                                 
                                
                                    
                                    io/file-hidden?
                                     
                                    
                                        Returns true if the file or directory f exists and is hidden. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-hidden? "/temp/test.txt")
                                    
                                 
                                
                                    
                                    io/file-name
                                     
                                    
                                        Returns the name of the file f. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-name (io/file "/tmp/test/x.txt"))
=> "x.txt"
                                    
                                 
                                
                                    
                                    io/file-parent
                                     
                                    
                                        Returns the parent file of the file f. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-path (io/file-parent (io/file "/tmp/test/x.txt")))
=> "/tmp/test"
                                    
                                 
                                
                                    
                                    io/file-path
                                     
                                    
                                        Returns the path of the file f. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-path (io/file "/tmp/test/x.txt"))
=> "/tmp/test/x.txt"
                                    
                                 
                                
                                    
                                    io/file-size
                                     
                                    
                                        Returns the size of the file f. f must be a file or a string (file path).
                                    
                                    
                                        (io/file-size "/bin/sh")
=> 618480
                                    
                                 
                                
                                    
                                    io/file?
                                     
                                    
                                        Returns true if x is a java.io.File.
                                    
                                    
                                        (io/file? (io/file "/temp/test.txt"))
=> true
                                    
                                 
                                
                                    
                                    io/gzip
                                     
                                    
                                        gzips f. f may be a file, a string (file path), a bytebuf or an InputStream. Returns a bytebuf.
                                    
                                    
                                        (->> (io/gzip "a.txt")  
     (io/spit "a.gz"))    
(io/gzip (bytebuf-from-string "abcdef" :utf-8))
                                    
                                 
                                
                                    
                                    io/gzip-to-stream
                                     
                                    
                                        gzips f to the OutputStream os. f may be a file, a string (file path), a bytebuf, or an InputStream.
                                    
                                    
                                        (do                                                 
  (import :java.io.ByteArrayOutputStream)           
  (try-with [os (. :ByteArrayOutputStream :new)]    
      (-> (bytebuf-from-string "abcdef" :utf-8)   
          (io/gzip-to-stream os))                   
      (-> (. os :toByteArray)                       
          (io/ungzip)                               
          (bytebuf-to-string :utf-8))))               
=> "abcdef"
                                    
                                 
                                
                                    
                                    io/gzip?
                                     
                                    
                                        Returns true if f is a gzipped file. f may be a file, a string (file path), a bytebuf, or an InputStream
                                    
                                    
                                        (-> (io/gzip (bytebuf-from-string "abc" :utf-8))     (io/gzip?))
=> true
                                    
                                 
                                
                                    
                                    io/list-files
                                     
                                        
                                         (io/list-files dir filterFn?)                          
                                        
                                     
                                    
                                        Lists files in a directory. dir must be a file or a string (file path). filterFn is an optional filter that filters the files found.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/load-classpath-resource
                                     
                                        
                                         (io/load-classpath-resource name)                          
                                        
                                     
                                    
                                        Loads a classpath resource.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/mime-type
                                     
                                    
                                        Returns the mime-type for the file if available else nil.
                                    
                                    
                                        (io/mime-type "document.pdf")
=> "application/pdf"
(io/mime-type (io/file "document.pdf"))
=> "application/pdf"
                                    
                                 
                                
                                    
                                    io/mkdir
                                     
                                    
                                        Creates the directory. dir must be a file or a string (file path).
                                    
                                    
                                        
                                 
                                
                                    
                                    io/mkdirs
                                     
                                    
                                        Creates the directory including any necessary but nonexistent parent directories. dir must be a file or a string (file path).
                                    
                                    
                                        
                                 
                                
                                    
                                    io/move-file
                                     
                                        
                                         (io/move-file source target)                          
                                        
                                     
                                    
                                        Moves source to target. Returns nil or throws IOException. Source and target must be a file or a string (file path).
                                    
                                    
                                        
                                 
                                
                                    
                                    io/slurp
                                     
                                    
                                        Reads the content of file f as text (string) or binary (bytebuf). f may be a file, a string file path, a Java InputStream, or a Java Reader. 
Options: 
  :binary true/false - e.g :binary true, defaults to false 
  :encoding enc - e.g :encoding :utf-8, defaults to :utf-8
                                    
                                    
                                        
                                 
                                
                                    
                                    io/slurp-lines
                                     
                                        
                                         (io/slurp-lines file & options)                          
                                        
                                     
                                    
                                        Read all lines from f. f may be a file, a string file path, a Java InputStream, or a Java Reader. 
Options: 
  :encoding enc - e.g :encoding :utf-8, defaults to :utf-8
                                    
                                    
                                        
                                 
                                
                                    
                                    io/slurp-stream
                                     
                                        
                                         (io/slurp-stream is & options)                          
                                        
                                     
                                    
                                        Slurps binary or string data from a Java InputStream. Supports the option :binary to either slurp binary or string data. For string data an optional encoding can be specified.
Options: 
  :binary true/false - e.g :binary true, defaults to false 
  :encoding enc - e.g :encoding :utf-8, defaults to :utf-8
                                    
                                    
                                        (do 
   (import :java.io.FileInputStream) 
   (let [file (io/temp-file "test-", ".txt")] 
        (io/delete-file-on-exit file) 
        (io/spit file "123456789" :append true) 
        (try-with [is (. :FileInputStream :new file)] 
           (io/slurp-stream is :binary false))) 
)
=> "123456789"
                                    
                                 
                                
                                    
                                    io/spit
                                     
                                        
                                         (io/spit f content & options)                          
                                        
                                     
                                    
                                        Opens f, writes content, and then closes f. f may be a file or a string (file path). 
Options: 
  :append true/false - e.g :append true, defaults to false 
  :encoding enc - e.g :encoding :utf-8, defaults to :utf-8
                                    
                                    
                                        
                                 
                                
                                    
                                    io/spit-stream
                                     
                                        
                                         (io/spit-stream os content & options)                          
                                        
                                     
                                    
                                        Writes content (string or bytebuf) to the Java OutputStream os. If content is of type string an optional encoding (defaults to UTF-8) is supported. The stream can optionally be flushed after the operation.
Options: 
  :flush true/false - e.g :flush true, defaults to false 
  :encoding enc - e.g :encoding :utf-8, defaults to :utf-8
                                    
                                    
                                        (do 
   (import :java.io.FileOutputStream) 
   (let [file (io/temp-file "test-", ".txt")] 
        (io/delete-file-on-exit file) 
        (try-with [os (. :FileOutputStream :new file)] 
           (io/spit-stream os "123456789" :flush true))) 
)
=> nil
                                    
                                 
                                
                                    
                                    io/temp-file
                                     
                                        
                                         (io/temp-file prefix suffix)                          
                                        
                                     
                                    
                                        Creates an empty temp file with prefix and suffix.
                                    
                                    
                                        (do 
   (let [file (io/temp-file "test-", ".txt")] 
        (io/spit file "123456789" :append true) 
        (io/slurp file :binary false :remove true)) 
)
=> "123456789"
                                    
                                 
                                
                                    
                                    io/tmp-dir
                                     
                                    
                                        Returns the tmp dir as a java.io.File.
                                    
                                    
                                        (io/tmp-dir )
=> /var/folders/rm/pjqr5pln3db4mxh5qq1j5yh80000gn/T
                                    
                                 
                                
                                    
                                    io/ungzip
                                     
                                    
                                        ungzips f. f may be a file, a string (file path), a bytebuf, or an InputStream. Returns a bytebuf.
                                    
                                    
                                        (-> (bytebuf-from-string "abcdef" :utf-8) 
    (io/gzip) 
    (io/ungzip))
=> [97 98 99 100 101 102]
                                    
                                 
                                
                                    
                                    io/ungzip-to-stream
                                     
                                        
                                         (io/ungzip-to-stream buf)                          
                                        
                                     
                                    
                                        ungzips a bytebuf returning an InputStream to read the deflated data from.
                                    
                                    
                                        (-> (bytebuf-from-string "abcdef" :utf-8) 
    (io/gzip) 
    (io/ungzip-to-stream) 
    (io/slurp-stream :binary false :encoding :utf-8))
=> "abcdef"
                                    
                                 
                                
                                    
                                    io/unzip
                                     
                                    
                                        Unzips an entry from zip f the entry's data as a bytebuf. f may be a bytebuf, 
a file, a string (file path) or an InputStream.
                                    
                                    
                                        (-> (io/zip "a.txt" (bytebuf-from-string "abcdef" :utf-8)) 
    (io/unzip "a.txt"))
=> [97 98 99 100 101 102]
                                    
                                 
                                
                                    
                                    io/unzip-all
                                     
                                    
                                        Unzips all entries of the zip f returning a map with the entry names as key and the entry data as bytebuf values. f may be a bytebuf, a file, a string (file path) or an InputStream.
                                    
                                    
                                        (-> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)  
            "b.txt" (bytebuf-from-string "def" :utf-8)  
            "c.txt" (bytebuf-from-string "ghi" :utf-8)) 
    (io/unzip-all))
=> {"a.txt" [97 98 99] "b.txt" [100 101 102] "c.txt" [103 104 105]}
                                    
                                 
                                
                                    
                                    io/unzip-first
                                     
                                    
                                        Unzips the first entry of the zip f returning its data as a bytebuf. f may be a bytebuf, a file, a string (file path) or an InputStream.
                                    
                                    
                                        (-> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)  
            "b.txt" (bytebuf-from-string "def" :utf-8)) 
    (io/unzip-first))
=> [97 98 99]
                                    
                                 
                                
                                    
                                    io/unzip-nth
                                     
                                    
                                        Unzips the nth (zero.based) entry of the zip f returning its data as a bytebuf. f may be a bytebuf, a file, a string (file path) or an InputStream.
                                    
                                    
                                        (-> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)  
            "b.txt" (bytebuf-from-string "def" :utf-8)  
            "c.txt" (bytebuf-from-string "ghi" :utf-8)) 
    (io/unzip-nth 1))
=> [100 101 102]
                                    
                                 
                                
                                    
                                    io/unzip-to-dir
                                     
                                    
                                        Unzips f to a directory. f may be a file, a string (file path), a bytebuf, or an InputStream.
                                    
                                    
                                        (-> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)  
            "b.txt" (bytebuf-from-string "def" :utf-8)  
            "c.txt" (bytebuf-from-string "ghi" :utf-8)) 
    (io/unzip-to-dir ".")
                                    
                                 
                                
                                    
                                    io/uri-stream
                                     
                                    
                                        Returns a Java InputStream from the uri.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/user-dir
                                     
                                    
                                        Returns the user dir (current working dir) as a java.io.File.
                                    
                                    
                                        
                                 
                                
                                    
                                    io/wrap-is-with-buffered-reader
                                     
                                        
                                         (io/wrap-is-with-buffered-reader is encoding?)                          
                                        
                                     
                                    
                                        Wraps an InputStream with a BufferedReader using an optional encoding (defaults to :utf-8).
                                    
                                    
                                        (do                                                                          
   (import :java.io.ByteArrayInputStream)                                    
   (let [data (byte-array [108 105 110 101 32 49 10 108 105 110 101 32 50])  
         is (. :ByteArrayInputStream :new data)                              
         rd (io/wrap-is-with-buffered-reader is :utf-8)]                     
      (println (. rd :readLine))                                             
      (println (. rd :readLine))))                                             
line 1
line 2
=> nil
                                    
                                 
                                
                                    
                                    io/wrap-os-with-buffered-writer
                                     
                                        
                                         (io/wrap-os-with-buffered-writer os encoding?)                          
                                        
                                     
                                    
                                        Wraps an OutputStream with a BufferedWriter using an optional encoding (defaults to :utf-8).
                                    
                                    
                                        (do                                                         
   (import :java.io.ByteArrayOutputStream)                  
   (let [os (. :ByteArrayOutputStream :new)                 
         wr (io/wrap-os-with-buffered-writer os :utf-8)]    
      (. wr :write "line 1")                              
      (. wr :newLine)                                       
      (. wr :write "line 2")                              
      (. wr :flush)                                         
      (. os :toByteArray)))                                   
=> [108 105 110 101 32 49 10 108 105 110 101 32 50]
                                    
                                 
                                
                                    
                                    io/wrap-os-with-print-writer
                                     
                                        
                                         (io/wrap-os-with-print-writer os encoding?)                          
                                        
                                     
                                    
                                        Wraps an OutputStream with a PrintWriter using an optional encoding (defaults to :utf-8).
                                    
                                    
                                        (do                                                      
   (import :java.io.ByteArrayOutputStream)               
   (let [os (. :ByteArrayOutputStream :new)              
         wr (io/wrap-os-with-print-writer os :utf-8)]    
      (. wr :println "line 1")                         
      (. wr :println "line 2")                         
      (. wr :flush)                                      
      (. os :toByteArray)))                                
=> [108 105 110 101 32 49 10 108 105 110 101 32 50 10]
                                    
                                 
                                
                                    
                                    io/zip
                                     
                                    
                                        Creates a zip containing the entries. An entry is given by a name and data. The entry data may be nil, a bytebuf, a file, a string (file path), or an InputStream. An entry name with a trailing '/' creates a directory. Returns the zip as bytebuf.
                                    
                                    
                                        ; single entry                                                   
(->> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8))     
     (io/spit "test.zip"))                                       
; multiple entries                                               
(->> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)      
             "b.txt" (bytebuf-from-string "def" :utf-8)      
             "c.txt" (bytebuf-from-string "ghi" :utf-8))     
     (io/spit "test.zip"))                                       
; multiple entries with subdirectories                           
(->> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)      
             "x/b.txt" (bytebuf-from-string "def" :utf-8)    
             "x/y/c.txt" (bytebuf-from-string "ghi" :utf-8)) 
     (io/spit "test.zip"))                                       
; empty directory z/                                             
(->> (io/zip "a.txt" (bytebuf-from-string "abc" :utf-8)      
             "z/" nil)                                         
     (io/spit "test.zip"))                                       
                                    
                                 
                                
                                    
                                    io/zip-append
                                     
                                        
                                         (io/zip-append f & entries)                          
                                        
                                     
                                    
                                        Appends entries to an existing zip file f. Overwrites existing entries. An entry is given by a name and data. The entry data may be nil, a bytebuf, a file, a string (file path), or an InputStream.An entry name with a trailing '/' creates a directory. 
                                    
                                    
                                          (let [data (bytebuf-from-string "abc" :utf-8)]                  
    ; create the zip with a first file                              
    (->> (io/zip "a.txt" data)                                    
         (io/spit "test.zip"))                                    
    ; add text files                                                
    (io/zip-append "test.zip" "b.txt" data "x/c.txt" data)    
    ; add an empty directory                                        
    (io/zip-append "test.zip" "x/y/" nil)))                       
                                    
                                 
                                
                                    
                                    io/zip-file
                                     
                                        
                                         (io/zip-file options* zip-file & files)                          
                                        
                                     
                                    
                                        Zips files. The zip-file my be a file, a string (file path) or an OutputStream. 
Options: 
  :filter-fn fn - filters the files to be added to the zip.
                                    
                                    
                                        (io/zip-file "test.zip" "a.txt" "x/b.txt")
(io/zip-file "test.zip" "dir")
(io/zip-file :filter-fn (fn [dir name] (str/ends-with? name ".txt"))  
             "test.zip" 
             "test-dir")
                                    
                                 
                                
                                    
                                    io/zip-list
                                     
                                        
                                         (io/zip-list f & options)                          
                                        
                                     
                                    
                                        List the content of a the zip f. f may be a bytebuf, a file, a string (file path), or an InputStream. 
Options: 
  :verbose true/false - e.g :verbose true, defaults to false
                                    
                                    
                                        (io/zip-list "test-file.zip")
(io/zip-list "test-file.zip" :verbose true)
                                    
                                 
                                
                                    
                                    io/zip-remove
                                     
                                        
                                         (io/zip-remove f & entry-names)                          
                                        
                                     
                                    
                                        Remove entries from a zip file f.
                                    
                                    
                                        ; remove files from zip 
(io/zip-remove "test.zip" "x/a.txt" "x/b.txt")
; remove directory from zip 
(io/zip-remove "test.zip" "x/y/")
                                    
                                 
                                
                                    
                                    io/zip?
                                     
                                    
                                        Returns true if f is a zipped file. f may be a file, a string (file path), a bytebuf, or an InputStream
                                    
                                    
                                        (-> (io/zip "a" (bytebuf-from-string "abc" :utf-8))     (io/zip?))
=> true
                                    
                                 
                                
                                    
                                    java-enumeration-to-list
                                     
                                        
                                         (java-enumeration-to-list e)                          
                                        
                                     
                                    
                                        Converts a Java enumeration to a list
                                    
                                    
                                        
                                 
                                
                                    
                                    java-iterator-to-list
                                     
                                        
                                         (java-iterator-to-list e)                          
                                        
                                     
                                    
                                        Converts a Java iterator to a list
                                    
                                    
                                        
                                 
                                
                                    
                                    java-obj?
                                     
                                    
                                        Returns true if obj is a Java object
                                    
                                    
                                        (java-obj? (. :java.math.BigInteger :new "0"))
=> true
                                    
                                 
                                
                                    
                                    java-version
                                     
                                    
                                        Returns the Jvav VM version.
                                    
                                    
                                        (java-version)
=> "1.8.0_201"
                                    
                                 
                                
                                    
                                    json/pretty-print
                                     
                                    
                                        Pretty prints a JSON string
                                    
                                    
                                        (json/pretty-print (json/write-str {:a 100 :b 100}))
=> "{\n  \"a\": 100,\n  \"b\": 100\n}"
                                    
                                 
                                
                                    
                                    json/read-str
                                     
                                        
                                         (json/read-str s & options)                          
                                        
                                     
                                    
                                        Reads a JSON string and returns it as a Venice datatype.
Options are: 
  :key-fn fn 
      Single-argument function called on JSON property names; 
      return value will replace the property names in the output. 
      Default is 'identity', use 'keyword' to get keyword 
      properties. 
  :value-fn fn 
      Function to transform values in JSON objects in
      the output. For each JSON property, value-fn is called with
      two arguments: the property name (transformed by key-fn) and
      the value. The return value of value-fn will replace the value
      in the output. The default value-fn returns the value unchanged.
  :decimal boolean 
      If true use BigDecimal for decimal numbers instead of Double.
      Default is false.
                                    
                                    
                                        (json/read-str (json/write-str {:a 100 :b 100}))
=> {"a" 100 "b" 100}
(json/read-str (json/write-str {:a 100 :b 100}) :key-fn keyword)
=> {:a 100 :b 100}
(json/read-str (json/write-str {:a 100 :b 100}) 
                   :value-fn (fn [k v] (if (== "a" k) (inc v) v)))
=> {"a" 101 "b" 100}
                                    
                                 
                                
                                    
                                    json/slurp
                                     
                                        
                                         (json/slurp in & options)                          
                                        
                                     
                                    
                                        Slurps a JSON string from the input and returns it as a Venice datatype.
in maybe a Java InputStream or a Java Reader. 
Options are: 
  :key-fn fn  
      Single-argument function called on JSON property names; 
      return value will replace the property names in the output. 
      Default is 'identity', use 'keyword' to get keyword 
      properties. 
  :value-fn fn 
      Function to transform values in JSON objects in
      the output. For each JSON property, value-fn is called with
      two arguments: the property name (transformed by key-fn) and
      the value. The return value of value-fn will replace the value
      in the output. The default value-fn returns the value unchanged.
  :decimal boolean 
      If true use BigDecimal for decimal numbers instead of Double.
      Default is false.
                                    
                                    
                                        (let [json (json/write-str {:a 100 :b 100})             
      data (bytebuf-from-string json :utf-8)            
      in (. :java.io.ByteArrayInputStream :new data)]   
  (str (json/slurp in)))                                  
=> "{a 100 b 100}"
                                    
                                 
                                
                                    
                                    json/spit
                                     
                                        
                                         (json/spit out val & options)                          
                                        
                                     
                                    
                                        Spits the JSON converted val to the output.
out maybe a Java OutputStream or a Java Writer. 
Options are: 
  :pretty boolean 
      Enables/disables pretty printing. 
      Defaults to false. 
  :decimal-as-double boolean 
      If true emit a decimal as double else as string. 
      Defaults to false.
                                    
                                    
                                        (let [out (. :java.io.ByteArrayOutputStream :new)]           
  (json/spit out {:a 100 :b 100 :c [10 20 30]})              
  (. out :flush)                                             
  (. :java.lang.String :new (. out :toByteArray) "utf-8"))   
=> "{\"a\":100,\"b\":100,\"c\":[10,20,30]}"
                                    
                                 
                                
                                    
                                    json/write-str
                                     
                                        
                                         (json/write-str val & options)                          
                                        
                                     
                                    
                                        Writes the val to a JSON string.
Options are: 
  :pretty boolean 
      Enables/disables pretty printing. 
      Defaults to false. 
  :decimal-as-double boolean 
      If true emit a decimal as double else as string. 
      Defaults to false.
                                    
                                    
                                        (json/write-str {:a 100 :b 100})
=> "{\"a\":100,\"b\":100}"
(json/write-str {:a 100 :b 100} :pretty true)
=> "{\n  \"a\": 100,\n  \"b\": 100\n}"
                                    
                                 
                                
                                    
                                    keep
                                     
                                    
                                        Returns a sequence of the non-nil results of (f item). Note, this means false return values will be included. f must be free of side-effects.
                                    
                                    
                                        (keep even? (range 1 4))
=> (false true false)
(keep (fn [x] (if (odd? x) x)) (range 4))
=> (1 3)
                                    
                                 
                                
                                    
                                    key
                                     
                                    
                                        Returns the key of the map entry.
                                    
                                    
                                        (key (find {:a 1 :b 2} :b))
=> :b
                                    
                                 
                                
                                    
                                    keys
                                     
                                    
                                        Returns a collection of the map's keys.
                                    
                                    
                                        (keys {:a 1 :b 2 :c 3})
=> (:a :b :c)
                                    
                                 
                                
                                    
                                    keyword
                                     
                                    
                                        Returns a keyword from the given name
                                    
                                    
                                        (keyword "a")
=> :a
(keyword :a)
=> :a
                                    
                                 
                                
                                    
                                    keyword?
                                     
                                    
                                        Returns true if x is a keyword
                                    
                                    
                                        (keyword? (keyword "a"))
=> true
(keyword? :a)
=> true
(keyword? nil)
=> false
(keyword? 'a)
=> false
                                    
                                 
                                
                                    
                                    last
                                     
                                    
                                        Returns the last element of coll.
                                    
                                    
                                        (last nil)
=> nil
(last [])
=> nil
(last [1 2 3])
=> 3
(last '())
=> nil
(last '(1 2 3))
=> 3
(last "abc")
=> "c"
                                    
                                 
                                
                                    
                                    let
                                     
                                    
                                        Evaluates the expressions and binds the values to symbols to new local context
                                    
                                    
                                        (let [x 1] x))
=> 1
;; destructured map                     
(let [{:keys [width height title ]      
       :or {width 640 height 500}       
       :as styles}                      
      {:width 1000 :title "Title"}]   
     (println "width: " width)        
     (println "height: " height)      
     (println "title: " title)        
     (println "styles: " styles))       
width:  1000
height:  500
title:  Title
styles:  {:width 1000 :title Title}
=> nil
                                    
                                 
                                
                                    
                                    list
                                     
                                    
                                        Creates a new list containing the items.
                                    
                                    
                                        (list )
=> ()
(list 1 2 3)
=> (1 2 3)
(list 1 2 3 [:a :b])
=> (1 2 3 [:a :b])
                                    
                                 
                                
                                    
                                    list*
                                     
                                        
                                         (list* args)(list* a args)(list* a b args)(list* a b c args)(list* a b c d & more)                          
                                        
                                     
                                    
                                        Creates a new list containing the items prepended to the rest, the
last of which will be treated as a collection.
                                    
                                    
                                        (list* 1 [2 3])
=> (1 2 3)
(list* 1 2 3 [4])
=> (1 2 3 4)
(list* '(1 2) 3 [4])
=> ((1 2) 3 4)
(list* nil)
=> nil
(list* nil [2 3])
=> (nil 2 3)
(list* 1 2 nil)
=> (1 2)
                                    
                                 
                                
                                    
                                    list-comp
                                     
                                        
                                         (list-comp seq-exprs body-expr)                          
                                        
                                     
                                    
                                        List comprehension. Takes a vector of one or more binding-form/collection-expr pairs, each followed by zero or more modifiers, and yields a collection of evaluations of expr. Supported modifiers are: :when test.
                                    
                                    
                                        (list-comp [x (range 10)] x)
=> (0 1 2 3 4 5 6 7 8 9)
(list-comp [x (range 5)] (* x 2))
=> (0 2 4 6 8)
(list-comp [x (range 10) :when (odd? x)] x)
=> (1 3 5 7 9)
(list-comp [x (range 10) :when (odd? x)] (* x 2))
=> (2 6 10 14 18)
(list-comp [x (list "abc") y [0 1 2]] [x y])
=> (["abc" 0] ["abc" 1] ["abc" 2])
                                    
                                 
                                
                                    
                                    list?
                                     
                                    
                                        Returns true if obj is a list
                                    
                                    
                                        (list? (list 1 2))
=> true
(list? '(1 2))
=> true
                                    
                                 
                                
                                    
                                    load-classpath-file
                                     
                                        
                                         (load-classpath-file name)                          
                                        
                                     
                                    
                                        Sequentially read and evaluate the set of forms contained in the classpath file. The function is restricted to classpath files with the extension '.venice'.
                                    
                                    
                                        (do
   (load-classpath-file "com/github/jlangch/venice/test.venice")
   (test/test-fn "hello"))
=> "test: hello"
                                    
                                 
                                
                                    
                                    load-file
                                     
                                    
                                        Sequentially read and evaluate the set of forms contained in the file.
                                    
                                    
                                        
                                 
                                
                                    
                                    load-module
                                     
                                    
                                        Loads a Venice predefined extension module.
                                    
                                    
                                        (do
   (load-module :math))
=> function math/bigint-to-long {visibility :public, module "math"}
                                    
                                 
                                
                                    
                                    load-string
                                     
                                    
                                        Sequentially read and evaluate the set of forms contained in the string.
                                    
                                    
                                        (do
   (load-string "(def x 1)")
   (+ x 2))
=> 3
                                    
                                 
                                
                                    
                                    long
                                     
                                    
                                        Converts to long
                                    
                                    
                                        (long 1)
=> 1
(long nil)
=> 0
(long false)
=> 0
(long true)
=> 1
(long 1.2)
=> 1
(long 1.2M)
=> 1
(long "1")
=> 1
                                    
                                 
                                
                                    
                                    long-array
                                     
                                        
                                         (long-array coll)(long-array len)(long-array len init-val)                          
                                        
                                     
                                    
                                        Returns an array of Java primitive longs containing the contents of coll or returns an array with the given length and optional init value
                                    
                                    
                                        (long-array '(1 2 3))
=> [1, 2, 3]
(long-array '(1I 2 3.2 3.56M))
=> [1, 2, 3, 3]
(long-array 10)
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
(long-array 10 42)
=> [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
                                    
                                 
                                
                                    
                                    long?
                                     
                                    
                                        Returns true if n is a long
                                    
                                    
                                        (long? 4)
=> true
(long? 4I)
=> false
(long? 3.1)
=> false
(long? true)
=> false
(long? nil)
=> false
(long? {})
=> false
                                    
                                 
                                
                                    
                                    loop
                                     
                                        
                                         (loop [bindings*] exprs*)                          
                                        
                                     
                                    
                                        Evaluates the exprs and binds the bindings. Creates a recursion point with the bindings.
                                    
                                    
                                        ;; tail recursion                                   
(loop [x 10]                                        
   (when (> x 1)                                    
      (println x)                                   
      (recur (- x 2))))                               
10
8
6
4
2
=> nil
;; tail recursion                                   
(do                                                 
   (defn sum [n]                                    
         (loop [cnt n acc 0]                        
            (if (zero? cnt)                         
                acc                                 
                (recur (dec cnt) (+ acc cnt)))))    
   (sum 10000))                                       
=> 50005000
                                    
                                 
                                
                                    
                                    macro?
                                     
                                    
                                        Returns true if x is a macro
                                    
                                    
                                        (macro? and)
=> true
                                    
                                 
                                
                                    
                                    macroexpand
                                     
                                    
                                        If form represents a macro form, returns its expansion, else returns form
                                    
                                    
                                        (macroexpand (-> c (+ 3) (* 2)))
=> (* (+ c 3) 2)
                                    
                                 
                                
                                    
                                    make-array
                                     
                                        
                                         (make-array type len)(make-array type dim &more-dims)                          
                                        
                                     
                                    
                                        Returns an array of the given type and length
                                    
                                    
                                        (str (make-array :long 5))
=> "[0, 0, 0, 0, 0]"
(str (make-array :java.lang.Long 5))
=> "[nil, nil, nil, nil, nil]"
(str (make-array :long 2 3))
=> "[[0 0 0], [0 0 0]]"
(aset (make-array :java.lang.Long 5) 3 9999)
=> [nil, nil, nil, 9999, nil]
                                    
                                 
                                
                                    
                                    map
                                     
                                    
                                        Applys f to the set of first items of each coll, followed by applying f to the set of second items in each coll, until any one of the colls is exhausted.  Any remaining items in other colls are ignored. 
                                    
                                    
                                        (map inc [1 2 3 4])
=> (2 3 4 5)
(map + [1 2 3 4] [10 20 30 40])
=> (11 22 33 44)
                                    
                                 
                                
                                    
                                    map-invert
                                     
                                    
                                        Returns the map with the vals mapped to the keys.
                                    
                                    
                                        (map-invert {:a 1 :b 2 :c 3})
=> {1 :a 2 :b 3 :c}
                                    
                                 
                                
                                    
                                    map?
                                     
                                    
                                        Returns true if obj is a map
                                    
                                    
                                        (map? {:a 1 :b 2})
=> true
                                    
                                 
                                
                                    
                                    mapcat
                                     
                                    
                                        Returns the result of applying concat to the result of applying map to fn and colls. Thus function fn should return a collection.
                                    
                                    
                                        (mapcat reverse [[3 2 1 0] [6 5 4] [9 8 7]])
=> (0 1 2 3 4 5 6 7 8 9)
                                    
                                 
                                
                                    
                                    mapv
                                     
                                    
                                        Returns a vector consisting of the result of applying f to the set of first items of each coll, followed by applying f to the set of second items in each coll, until any one of the colls is exhausted.  Any remaining items in other colls are ignored. 
                                    
                                    
                                        (mapv inc [1 2 3 4])
=> [2 3 4 5]
(mapv + [1 2 3 4] [10 20 30 40])
=> [11 22 33 44]
                                    
                                 
                                
                                    
                                    match?
                                     
                                    
                                        Returns true if the string s matches the regular expression regex
                                    
                                    
                                        (match? "1234" "[0-9]+")
=> true
(match? "1234ss" "[0-9]+")
=> false
                                    
                                 
                                
                                    
                                    max
                                     
                                        
                                         (max x)(max x y)(max x y & more)                          
                                        
                                     
                                    
                                        Returns the greatest of the values
                                    
                                    
                                        (max 1)
=> 1
(max 1 2)
=> 2
(max 4 3 2 1)
=> 4
(max (int 1) (int 2))
=> 2I
(max 1.0)
=> 1.0
(max 1.0 2.0)
=> 2.0
(max 4.0 3.0 2.0 1.0)
=> 4.0
(max 1.0M)
=> 1.0M
(max 1.0M 2.0M)
=> 2.0M
(max 4.0M 3.0M 2.0M 1.0M)
=> 4.0M
(max 1.0M 2)
=> 2
                                    
                                 
                                
                                    
                                    memoize
                                     
                                    
                                        Returns a memoized version of a referentially transparent function.
                                    
                                    
                                        (do
   (def fibonacci
      (memoize
         (fn [n]
             (cond
                (<= n 0) 0
                (< n 2) 1
                :else (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))))
   (time (fibonacci 25)))
Elapsed time: 10.51 ms
=> 75025
                                    
                                 
                                
                                    
                                    merge
                                     
                                    
                                        Returns a map that consists of the rest of the maps conj-ed onto the first.  If a key occurs in more than one map, the mapping from the latter (left-to-right) will be the mapping in the result.
                                    
                                    
                                        (merge {:a 1 :b 2 :c 3} {:b 9 :d 4})
=> {:a 1 :b 9 :c 3 :d 4}
(merge {:a 1} nil)
=> {:a 1}
(merge nil {:a 1})
=> {:a 1}
(merge nil nil)
=> nil
                                    
                                 
                                
                                    
                                    meta
                                     
                                    
                                        Returns the metadata of obj, returns nil if there is no metadata.
                                    
                                    
                                        
                                 
                                
                                    
                                    min
                                     
                                        
                                         (min x)(min x y)(min x y & more)                          
                                        
                                     
                                    
                                        Returns the smallest of the values
                                    
                                    
                                        (min 1)
=> 1
(min 1 2)
=> 1
(min 4 3 2 1)
=> 1
(min (int 1) (int 2))
=> 1I
(min 1.0)
=> 1.0
(min 1.0 2.0)
=> 1.0
(min 4.0 3.0 2.0 1.0)
=> 1.0
(min 1.0M)
=> 1.0M
(min 1.0M 2.0M)
=> 1.0M
(min 4.0M 3.0M 2.0M 1.0M)
=> 1.0M
(min 1.0M 2)
=> 1.0M
                                    
                                 
                                
                                    
                                    mod
                                     
                                    
                                        Modulus of n and d.
                                    
                                    
                                        (mod 10 4)
=> 2
(mod (int 10) (int 4))
=> 2I
                                    
                                 
                                
                                    
                                    module
                                     
                                    
                                        Returns the module a function/macro has been defined in.
                                    
                                    
                                        (module +)
=> "core"
                                    
                                 
                                
                                    
                                    mutable-map
                                     
                                        
                                         (mutable-map & keyvals)(mutable-map map)                          
                                        
                                     
                                    
                                        Creates a new mutable threadsafe map containing the items.
                                    
                                    
                                        (mutable-map :a 1 :b 2)
=> {:a 1 :b 2}
(mutable-map (hash-map :a 1 :b 2))
=> {:a 1 :b 2}
                                    
                                 
                                
                                    
                                    mutable-map?
                                     
                                    
                                        Returns true if obj is a mutable map
                                    
                                    
                                        (mutable-map? (mutable-map :a 1 :b 2))
=> true
                                    
                                 
                                
                                    
                                    name
                                     
                                    
                                        Returns the name String of a string, symbol, keyword, or function/macro.
                                    
                                    
                                        (name :x)
=> "x"
(name 'x)
=> "x"
(name "x")
=> "x"
                                    
                                 
                                
                                    
                                    nano-time
                                     
                                    
                                        Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds.
                                    
                                    
                                        (nano-time)
=> 826355230990319
                                    
                                 
                                
                                    
                                    neg?
                                     
                                    
                                        Returns true if x smaller than zero else false
                                    
                                    
                                        (neg? -3)
=> true
(neg? 3)
=> false
(neg? (int -3))
=> true
(neg? -3.2)
=> true
(neg? -3.2M)
=> true
                                    
                                 
                                
                                    
                                    negate
                                     
                                    
                                        Negates x
                                    
                                    
                                        (negate 10)
=> -10
(negate (int 10))
=> -10I
(negate 1.23)
=> -1.23
(negate 1.23M)
=> -1.23M
                                    
                                 
                                
                                    
                                    newline
                                     
                                    
                                        Writes a platform-specific newline to *out*
                                    
                                    
                                        (newline)
=> nil
                                    
                                 
                                
                                    
                                    nfirst
                                     
                                    
                                        Returns a collection of the first n items
                                    
                                    
                                        (nfirst nil 2)
=> ()
(nfirst [] 2)
=> []
(nfirst [1] 2)
=> [1]
(nfirst [1 2 3] 2)
=> [1 2]
(nfirst '() 2)
=> ()
(nfirst '(1) 2)
=> (1)
(nfirst '(1 2 3) 2)
=> (1 2)
                                    
                                 
                                
                                    
                                    nil?
                                     
                                    
                                        Returns true if x is nil, false otherwise
                                    
                                    
                                        (nil? nil)
=> true
(nil? 0)
=> false
(nil? false)
=> false
                                    
                                 
                                
                                    
                                    nlast
                                     
                                    
                                        Returns a collection of the last n items
                                    
                                    
                                        (nlast nil 2)
=> ()
(nlast [] 2)
=> []
(nlast [1] 2)
=> [1]
(nlast [1 2 3] 2)
=> [2 3]
(nlast '() 2)
=> ()
(nlast '(1) 2)
=> (1)
(nlast '(1 2 3) 2)
=> (2 3)
                                    
                                 
                                
                                    
                                    not
                                     
                                    
                                        Returns true if x is logical false, false otherwise.
                                    
                                    
                                        (not true)
=> false
(not (== 1 2))
=> true
                                    
                                 
                                
                                    
                                    not-any?
                                     
                                    
                                        Returns false if the predicate is true for at least one collection item, true otherwise
                                    
                                    
                                        (not-any? number? nil)
=> true
(not-any? number? [])
=> true
(not-any? number? [1 :a :b])
=> false
(not-any? number? [1 2 3])
=> false
(not-any? #(>= % 10) [1 5 10])
=> false
                                    
                                 
                                
                                    
                                    not-empty?
                                     
                                    
                                        Returns true if x is not empty
                                    
                                    
                                        (not-empty? {:a 1})
=> true
(not-empty? [1 2])
=> true
(not-empty? '(1 2))
=> true
                                    
                                 
                                
                                    
                                    not-every?
                                     
                                    
                                        Returns false if the predicate is true for all collection items, true otherwise
                                    
                                    
                                        (not-every? number? nil)
=> true
(not-every? number? [])
=> true
(not-every? number? [1 2 3 4])
=> false
(not-every? number? [1 2 3 :a])
=> true
(not-every? #(>= % 10) [10 11 12])
=> false
                                    
                                 
                                
                                    
                                    not-match?
                                     
                                    
                                        Returns true if the string s does not match the regular expression regex
                                    
                                    
                                        (not-match? "1234" "[0-9]+")
=> false
(not-match? "1234ss" "[0-9]+")
=> true
                                    
                                 
                                
                                    
                                    nth
                                     
                                    
                                        Returns the nth element of coll.
                                    
                                    
                                        (nth nil 1)
=> nil
(nth [1 2 3] 1)
=> 2
(nth '(1 2 3) 1)
=> 2
(nth "abc" 2)
=> "c"
                                    
                                 
                                
                                    
                                    number?
                                     
                                    
                                        Returns true if n is a number (int, long, double, or decimal)
                                    
                                    
                                        (number? 4I))
=> true
(number? 4)
=> true
(number? 4.0M)
=> true
(number? 4.0)
=> true
(number? true)
=> false
(number? "a")
=> false
                                    
                                 
                                
                                    
                                    object-array
                                     
                                        
                                         (object-array coll)(object-array len)(object-array len init-val)                          
                                        
                                     
                                    
                                        Returns an array of Java Objects containing the contents of coll or returns an array with the given length and optional init value
                                    
                                    
                                        (object-array '(1 2 3 4 5))
=> [1, 2, 3, 4, 5]
(object-array '(1 2.0 3.45M "4" true))
=> [1, 2.0, 3.45M, "4", true]
(object-array 10)
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
(object-array 10 42)
=> [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
                                    
                                 
                                
                                    
                                    odd?
                                     
                                    
                                        Returns true if n is odd, throws an exception if n is not an integer
                                    
                                    
                                        (odd? 3)
=> true
(odd? 4)
=> false
(odd? (int 4))
=> false
                                    
                                 
                                
                                    
                                    offer!
                                     
                                        
                                         (offer! queue v)(offer! queue timeout v)                          
                                        
                                     
                                    
                                        Offers an item to a queue with an optional timeout in milliseconds.
                                    
                                    
                                        (let [s (queue)]
   (offer! s 4)
   (offer! s 3)
   (poll! s)
   s)
=> (3)
                                    
                                 
                                
                                    
                                    or
                                     
                                    
                                        Ors the predicate forms
                                    
                                    
                                        (or true false)
=> true
(or false false)
=> false
                                    
                                 
                                
                                    
                                    ordered-map
                                     
                                        
                                         (ordered-map & keyvals)(ordered-map map)                          
                                        
                                     
                                    
                                        Creates a new ordered map containing the items.
                                    
                                    
                                        (ordered-map :a 1 :b 2)
=> {:a 1 :b 2}
(ordered-map (hash-map :a 1 :b 2))
=> {:a 1 :b 2}
                                    
                                 
                                
                                    
                                    ordered-map?
                                     
                                    
                                        Returns true if obj is an ordered map
                                    
                                    
                                        (ordered-map? (ordered-map :a 1 :b 2))
=> true
                                    
                                 
                                
                                    
                                    os-type
                                     
                                    
                                        Returns the OS type
                                    
                                    
                                        (os-type)
=> :mac-osx
                                    
                                 
                                
                                    
                                    os-type?
                                     
                                    
                                        Returns true if the OS id of the type otherwise false. Type is one of :windows, :mac-osx, or :linux
                                    
                                    
                                        (os-type? :mac-osx)
=> true
(os-type? :windows)
=> false
                                    
                                 
                                
                                    
                                    partial
                                     
                                    
                                        Takes a function f and fewer than the normal arguments to f, and returns a fn that takes a variable number of additional args. When called, the returned function calls f with args + additional args.
                                    
                                    
                                        ((partial * 2) 3)
=> 6
(map (partial * 2) [1 2 3 4])
=> (2 4 6 8)
(do 
   (def hundred-times (partial * 100)) 
   (hundred-times 5))
=> 500
                                    
                                 
                                
                                    
                                    partition
                                     
                                        
                                         (partition n coll)(partition n step coll)(partition n step padcoll coll)                          
                                        
                                     
                                    
                                        Returns a collection of lists of n items each, at offsets step apart. If step is not supplied, defaults to n, i.e. the partitions do not overlap. If a padcoll collection is supplied, use its elements as necessary to complete last partition upto n items. In case there are not enough padding elements, return a partition with less than n items.
                                    
                                    
                                        (partition 4 (range 20))
=> ((0 1 2 3) (4 5 6 7) (8 9 10 11) (12 13 14 15) (16 17 18 19))
(partition 4 6 (range 20))
=> ((0 1 2 3) (6 7 8 9) (12 13 14 15) (18 19))
(partition 3 6 ["a"] (range 20))
=> ((0 1 2) (6 7 8) (12 13 14) (18 19 "a"))
(partition 4 6 ["a" "b" "c" "d"] (range 20))
=> ((0 1 2 3) (6 7 8 9) (12 13 14 15) (18 19 "a" "b"))
                                    
                                 
                                
                                    
                                    peek
                                     
                                    
                                        For a list, same as first, for a vector, same as last, for a stack the top element
                                    
                                    
                                        (peek '(1 2 3 4))
=> 1
(peek [1 2 3 4])
=> 4
(let [s (stack)]
   (push! s 4)
  (peek s))
=> 4
                                    
                                 
                                
                                    
                                    perf
                                     
                                        
                                         (perf expr warmup-iterations test-iterations)                          
                                        
                                     
                                    
                                        Performance test with the given expression. 
Runs the test in 3 phases: 
   1. Runs the expr in a warmup phase to allow the HotSpot compiler to do optimizations. 
   2. Runs the garbage collector 
   3. Runs the expression under profiling.
Returns nil.
After a test run metrics data can be printed with (println (prof :data-formatted))
                                    
                                    
                                        (do
   (perf (+ 120 200) 12000 1000)
   (println (prof :data-formatted)))
                                    
                                 
                                
                                    
                                    pid
                                     
                                    
                                        Returns the PID of this process.
                                    
                                    
                                        (pid)
=> "10330"
                                    
                                 
                                
                                    
                                    poll!
                                     
                                        
                                         (poll! queue)(poll! queue timeout)                          
                                        
                                     
                                    
                                        Polls an item from a queue with an optional timeout in milliseconds.
                                    
                                    
                                        (let [s (queue)]
   (offer! s 4)
   (offer! s 3)
   (poll! s)
   s)
=> (3)
                                    
                                 
                                
                                    
                                    pop
                                     
                                    
                                        For a list, returns a new list without the first item, for a vector, returns a new vector without the last item.
                                    
                                    
                                        (pop '(1 2 3 4))
=> (2 3 4)
(pop [1 2 3 4])
=> [1 2 3]
                                    
                                 
                                
                                    
                                    pop!
                                     
                                    
                                        Pops an item from a stack.
                                    
                                    
                                        (let [s (stack)]
   (push! s 4)
   (push! s 3)
   (pop! s)
   s)
=> (4)
                                    
                                 
                                
                                    
                                    pos?
                                     
                                    
                                        Returns true if x greater than zero else false
                                    
                                    
                                        (pos? 3)
=> true
(pos? -3)
=> false
(pos? (int 3))
=> true
(pos? 3.2)
=> true
(pos? 3.2M)
=> true
                                    
                                 
                                
                                    
                                    pr-str
                                     
                                    
                                        With no args, returns the empty string. With one arg x, returns x.toString(). With more than one arg, returns the concatenation of the str values of the args with delimiter ' '.
                                    
                                    
                                        (pr-str )
=> ""
(pr-str 1 2 3)
=> "1 2 3"
                                    
                                 
                                
                                    
                                    print
                                     
                                    
                                        Prints to stdout, with no args, prints the empty string. With one arg x, prints x.toString(). With more than one arg, prints the concatenation of the str values of the args with delimiter ' '. Returns nil.
                                    
                                    
                                        (print [10 20 30])
[10 20 30]
=> nil
                                    
                                 
                                
                                    
                                    printf
                                     
                                    
                                        Prints formatted output, as per format
                                    
                                    
                                        (printf "%s: %d" "abc" 100)
abc: 100
=> nil
                                    
                                 
                                
                                    
                                    println
                                     
                                    
                                        Prints to stdout with a tailing linefeed, with no args, prints the empty string. With one arg x, prints x.toString(). With more than one arg, prints the concatenation of the str values of the args with delimiter ' '. Returns nil.
                                    
                                    
                                        (do (println 200) (println [10 20 30]))
200
[10 20 30]
=> nil
                                    
                                 
                                
                                    
                                    prof
                                     
                                    
                                        Controls the code profiling. See the companion functions/macros 'dorun' and 'perf'. The perf macro is built on prof and dorun and provides all to do simple Venice profiling.
                                    
                                    
                                        (do  
  (prof :on)   ; turn profiler on  
  (prof :off)   ; turn profiler off  
  (prof :status)   ; returns the profiler on/off staus  
  (prof :clear)   ; clear profiler data captured so far  
  (prof :data)   ; returns the profiler data as map  
  (prof :data-formatted)   ; returns the profiler data as formatted text  
  (prof :data-formatted "Metrics test")   ; returns the profiler data as formatted text with a title  
  nil)  
=> nil
                                    
                                 
                                
                                    
                                    promise
                                     
                                    
                                        Returns a promise object that can be read with deref, and set, once only, with deliver. Calls to deref prior to delivery will block, unless the variant of deref with timeout is used. All subsequent derefs will return the same delivered value without blocking.
                                    
                                    
                                        (do                                        
   (def p (promise))                       
   (def task (fn []                        
                 (do                       
                    (sleep 500)            
                    (deliver p 123))))     
                                           
   (future task)                           
   (deref p))
=> 123
                                    
                                 
                                
                                    
                                    promise?
                                     
                                    
                                        Returns true if f is a Promise otherwise false
                                    
                                    
                                        (promise? (promise)))
=> true
                                    
                                 
                                
                                    
                                    proxify
                                     
                                        
                                         (proxify classname method-map)                          
                                        
                                     
                                    
                                        Proxifies a Java interface to be passed as a Callback object to Java functions. The interface's methods are implemented by Venice functions.
                                    
                                    
                                        (do 
   (import :java.io.File :java.io.FilenameFilter) 
   (def file-filter 
        (fn [dir name] (str/ends-with? name ".xxx"))) 
   (let [dir (io/tmp-dir )] 
        ;; create a dynamic proxy for the interface FilenameFilter
        ;; and implement its function 'accept' by 'file-filter'
        (. dir :list (proxify :FilenameFilter {:accept file-filter}))) 
)
=> []
                                    
                                 
                                
                                    
                                    push!
                                     
                                    
                                        Pushes an item to a stack.
                                    
                                    
                                        (let [s (stack)]
   (push! s 4)
   (push! s 3)
   (pop! s)
   s)
=> (4)
                                    
                                 
                                
                                    
                                    queue
                                     
                                    
                                        Creates a new mutable threadsafe bounded or unbounded queue.
                                    
                                    
                                        ;unbounded queue   
(let [q (queue)]   
  (offer! q 1)     
  (offer! q 2)     
  (offer! q 3)     
  (poll! q)        
   q)                
=> (2 3)
;bounded queue        
(let [q (queue 10)]   
  (offer! q 1000 1)   
  (offer! q 1000 2)   
  (offer! q 1000 3)   
  (poll! q 1000)      
   q)                   
=> (2 3)
                                    
                                 
                                
                                    
                                    queue?
                                     
                                    
                                        Returns true if obj is a queue
                                    
                                    
                                        (queue? (queue))
=> true
                                    
                                 
                                
                                    
                                    rand-double
                                     
                                        
                                         (rand-double)(rand-double max)                          
                                        
                                     
                                    
                                        Without argument returns a double between 0.0 and 1.0. With argument max returns a random double between 0.0 and max.
                                    
                                    
                                        (rand-double)
=> 0.7781576725868681
(rand-double 100.0)
=> 24.1678039875298
                                    
                                 
                                
                                    
                                    rand-gaussian
                                     
                                        
                                         (rand-gaussian)(rand-gaussian mean stddev)                          
                                        
                                     
                                    
                                        Without argument returns a Gaussion distributed double value with mean 0.0 and standard deviation 1.0. With argument mean and stddev returns a Gaussion distributed double value with the given mean and standard deviation.
                                    
                                    
                                        (rand-gaussian)
=> -2.1931517976308923
(rand-gaussian 0.0 5.0)
=> -3.9640046558205833
                                    
                                 
                                
                                    
                                    rand-long
                                     
                                        
                                         (rand-long)(rand-long max)                          
                                        
                                     
                                    
                                        Without argument returns a random long between 0 and MAX_LONG. With argument max returns a random long between 0 and max exclusive.
                                    
                                    
                                        (rand-long)
=> 2577285453827156968
(rand-long 100)
=> 56
                                    
                                 
                                
                                    
                                    range
                                     
                                        
                                         (range end)(range start end)(range start end step)                          
                                        
                                     
                                    
                                        Returns a collection of numbers from start (inclusive) to end (exclusive), by step, where start defaults to 0 and step defaults to 1. When start is equal to end, returns empty list.
                                    
                                    
                                        (range 10)
=> (0 1 2 3 4 5 6 7 8 9)
(range 10 20)
=> (10 11 12 13 14 15 16 17 18 19)
(range 10 20 3)
=> (10 13 16 19)
(range (int 10) (int 20))
=> (10I 11I 12I 13I 14I 15I 16I 17I 18I 19I)
(range (int 10) (int 20) (int 3))
=> (10I 13I 16I 19I)
(range 10 15 0.5)
=> (10 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5)
(range 1.1M 2.2M 0.1M)
=> (1.1M 1.2M 1.3M 1.4M 1.5M 1.6M 1.7M 1.8M 1.9M 2.0M 2.1M)
                                    
                                 
                                
                                
                                    
                                    readline
                                     
                                    
                                        Reads the next line from stdin. The function is sandboxed
                                    
                                    
                                        
                                 
                                
                                    
                                    realized?
                                     
                                    
                                        Returns true if a value has been produced for a promise, delay, or future.
                                    
                                    
                                        (do                                
   (def task (fn [] 100))          
   (let [f (future task)]          
        (println (realized? f))    
        (println @f)               
        (println (realized? f))))    
false
100
true
=> nil
(do                                
   (def p (promise))               
   (println (realized? p))         
   (deliver p 123)                 
   (println @p)                    
   (println (realized? p)))          
false
123
true
=> nil
(do                                
   (def x (delay 100))             
   (println (realized? x))         
   (println @x)                    
   (println (realized? x)))          
false
100
true
=> nil
                                    
                                 
                                
                                    
                                    recur
                                     
                                    
                                        Evaluates the exprs and rebinds the bindings of the recursion point to the values of the exprs. The recur expression must be at the tail position. The tail position is a postion which an expression would return a value from.
                                    
                                    
                                        ;; tail recursion                                   
(loop [x 10]                                        
   (when (> x 1)                                    
      (println x)                                   
      (recur (- x 2))))                               
10
8
6
4
2
=> nil
;; tail recursion                                   
(do                                                 
   (defn sum [n]                                    
         (loop [cnt n acc 0]                        
            (if (zero? cnt)                         
                acc                                 
                (recur (dec cnt) (+ acc cnt)))))    
   (sum 10000))                                       
=> 50005000
                                    
                                 
                                
                                    
                                    reduce
                                     
                                        
                                         (reduce f coll)(reduce f val coll)                          
                                        
                                     
                                    
                                        f should be a function of 2 arguments. If val is not supplied, returns the result of applying f to the first 2 items in coll, then applying f to that result and the 3rd item, etc. If coll contains no items, f must accept no arguments as well, and reduce returns the result of calling f with no arguments.  If coll has only 1 item, it is returned and f is not called.  If val is supplied, returns the result of applying f to val and the first item in coll, then applying f to that result and the 2nd item, etc. If coll contains no items, returns val and f is not called.
                                    
                                    
                                        (reduce (fn [x y] (+ x y)) [1 2 3 4 5 6 7])
=> 28
(reduce (fn [x y] (+ x y)) 10 [1 2 3 4 5 6 7])
=> 38
((reduce comp [(partial + 1) (partial * 2) (partial + 3)]) 100)
=> 207
(reduce (fn [m [k v]] (assoc m v k)) {} {:b 2 :a 1 :c 3})
=> {1 :a 2 :b 3 :c}
(reduce (fn [m c] (assoc m (first c) c)) {} [[:a 1] [:b 2] [:c 3]])
=> {:a [:a 1] :b [:b 2] :c [:c 3]}
                                    
                                 
                                
                                    
                                    reduce-kv
                                     
                                    
                                        Reduces an associative collection. f should be a function of 3 arguments. Returns the result of applying f to init, the first key and the first value in coll, then applying f to that result and the 2nd key and value, etc. If coll contains no entries, returns init and f is not called. Note that reduce-kv is supported on vectors, where the keys will be the ordinals.
                                    
                                    
                                        (reduce-kv (fn [x y z] (assoc x z y)) {} {:a 1 :b 2 :c 3})
=> {1 :a 2 :b 3 :c}
                                    
                                 
                                
                                    
                                    regex/find
                                     
                                    
                                        Returns the next regex match
                                    
                                    
                                        (let [m (regex/matcher "[0-9]+" "672-345-456-3212")]  
   (println (regex/find m))                               
   (println (regex/find m))                               
   (println (regex/find m))                               
   (println (regex/find m))                               
   (println (regex/find m)))                              
672
345
456
3212
nil
=> nil
                                    
                                 
                                
                                    
                                    regex/find-all
                                     
                                    
                                        Returns all regex matches
                                    
                                    
                                        (let [m (regex/matcher "[0-9]+" "672-345-456-3212")]  
   (regex/find-all m)))                                     
=> ("672" "345" "456" "3212")
                                    
                                 
                                
                                    
                                    regex/find-all-groups
                                     
                                        
                                         (regex/find-all-groups matcher)                          
                                        
                                     
                                    
                                        Returns the all regex matchws and returns the groups
                                    
                                    
                                        (let [m (regex/matcher "[0-9]+" "672-345-456-3212")]  
  (regex/find-all-groups m))                              
=> ({:group "672" :start 0 :end 3} {:group "345" :start 4 :end 7} {:group "456" :start 8 :end 11} {:group "3212" :start 12 :end 16})
                                    
                                 
                                
                                    
                                    regex/find-group
                                     
                                        
                                         (regex/find-group matcher)                          
                                        
                                     
                                    
                                        Returns the next regex match and returns the group
                                    
                                    
                                        (let [m (regex/matcher "[0-9]+" "672-345-456-3212")]  
   (println (regex/find-group m))                         
   (println (regex/find-group m))                         
   (println (regex/find-group m))                         
   (println (regex/find-group m))                         
   (println (regex/find-group m)))                        
{:group 672 :start 0 :end 3}
{:group 345 :start 4 :end 7}
{:group 456 :start 8 :end 11}
{:group 3212 :start 12 :end 16}
nil
=> nil
                                    
                                 
                                
                                    
                                    regex/find?
                                     
                                    
                                        Attempts to find the next subsequence that matches the pattern. If the match succeeds then more information can be obtained via the regex/group function
                                    
                                    
                                        (let [p (regex/pattern "[0-9]+")  
      m (regex/matcher p "100")]  
   (regex/find? m))
=> true
                                    
                                 
                                
                                    
                                    regex/group
                                     
                                        
                                         (regex/group matcher group)                          
                                        
                                     
                                    
                                        Returns the input subsequence captured by the given group during theprevious match operation.
                                    
                                    
                                        (let [p (regex/pattern "([0-9]+)(.*)")      
      m (regex/matcher p "100abc")]         
   (if (regex/matches? m)                     
      [(regex/group m 1) (regex/group m 2)]   
      []))                                      
=> ["100" "abc"]
                                    
                                 
                                
                                    
                                    regex/groupcount
                                     
                                        
                                         (regex/groupcount matcher)                          
                                        
                                     
                                    
                                        Returns the matcher's group count.
                                    
                                    
                                        (let [p (regex/pattern "([0-9]+)(.*)")  
      m (regex/matcher p "100abc")]     
   (regex/groupcount m))                    
=> 2
                                    
                                 
                                
                                    
                                    regex/matcher
                                     
                                        
                                         (regex/matcher pattern str)                          
                                        
                                     
                                    
                                        Returns an instance of java.util.regex.Matcher. The pattern can be either a string or a pattern created by (regex/pattern s)
                                    
                                    
                                        (regex/matcher "[0-9]+" "100")
=> java.util.regex.Matcher[pattern=[0-9]+ region=0,3 lastmatch=]
(let [p (regex/pattern "[0-9]+")] 
   (regex/matcher p "100"))
=> java.util.regex.Matcher[pattern=[0-9]+ region=0,3 lastmatch=]
                                    
                                 
                                
                                    
                                    regex/matches
                                     
                                        
                                         (regex/matches pattern str)                          
                                        
                                     
                                    
                                        Returns the match, if any, of string to pattern, using java.util.regex.Matcher.matches(). Returns the groups.
                                    
                                    
                                        (regex/matches "hello, (.*)" "hello, world")
=> ("hello, world" "world")
(regex/matches "([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)" "672-345-456-212")
=> ("672-345-456-212" "672" "345" "456" "212")
                                    
                                 
                                
                                    
                                    regex/matches?
                                     
                                    
                                        Attempts to match the entire region against the pattern. If the match succeeds then more information can be obtained via the regex/group function
                                    
                                    
                                        (let [p (regex/pattern "[0-9]+")  
      m (regex/matcher p "100")]  
   (regex/matches? m))
=> true
                                    
                                 
                                
                                    
                                    regex/pattern
                                     
                                    
                                        Returns an instance of java.util.regex.Pattern.
                                    
                                    
                                        (regex/pattern "[0-9]+")
=> [0-9]+
                                    
                                 
                                
                                    
                                    regex/reset
                                     
                                        
                                         (regex/reset matcher str)                          
                                        
                                     
                                    
                                        Resets the matcher with a new string
                                    
                                    
                                        (let [p (regex/pattern "[0-9]+")  
      m1 (regex/matcher p "100")  
      m2 (regex/reset m1 "200")]  
   (regex/find? m2))                  
=> true
                                    
                                 
                                
                                    
                                    remove
                                     
                                    
                                        Returns a collection of the items in coll for which (predicate item) returns logical false. 
                                    
                                    
                                        (remove even? [1 2 3 4 5 6 7])
=> [1 3 5 7]
                                    
                                 
                                
                                    
                                    remove-watch
                                     
                                    
                                        Removes a watch function from an agent/atom reference.
                                    
                                    
                                        (do                                      
   (def x (agent 10))                    
   (defn watcher [key ref old new]       
         (println "watcher: " key))    
   (add-watch x :test watcher)           
   (remove-watch x :test))                 
=> nil
                                    
                                 
                                
                                    
                                    repeat
                                     
                                    
                                        Returns a collection with the value x repeated n times
                                    
                                    
                                        (repeat 5 [1 2])
=> ([1 2] [1 2] [1 2] [1 2] [1 2])
                                    
                                 
                                
                                    
                                    repeatedly
                                     
                                    
                                        Takes a function of no args, presumably with side effects, and returns a collection of n calls to it
                                    
                                    
                                        (repeatedly 5 #(rand-long 11))
=> (3 2 1 6 10)
;; compare with repeat, which only calls the 'rand-long'
;; function once, repeating the value five times. 
(repeat 5 (rand-long 11))
=> (8 8 8 8 8)
                                    
                                 
                                
                                    
                                    replace
                                     
                                    
                                        Given a map of replacement pairs and a collection, returns a
collection with any elements that are a key in smap replaced with the
corresponding value in smap.
                                    
                                    
                                        (replace {2 :two, 4 :four} [4 2 3 4 5 6 2])
=> [:four :two 3 :four 5 6 :two]
(replace {2 :two, 4 :four} #{1 2 3 4 5})
=> #{1 3 5 :four :two}
(replace {[:a 10] [:c 30]} {:a 10 :b 20})
=> {:b 20 :c 30}
                                    
                                 
                                
                                    
                                    reset!
                                     
                                    
                                        Sets the value of atom to newval without regard for the current value. Returns newval.
                                    
                                    
                                        (do
   (def counter (atom 0))
   (reset! counter 99)
   (deref counter))
=> 99
                                    
                                 
                                
                                    
                                    resolve
                                     
                                    
                                        Resolves a symbol.
                                    
                                    
                                        (resolve '+)
=> function + {visibility :public, module "core"}
(resolve (symbol "+"))
=> function + {visibility :public, module "core"}
                                    
                                 
                                
                                    
                                    rest
                                     
                                    
                                        Returns a collection with second to list element
                                    
                                    
                                        (rest nil)
=> nil
(rest [])
=> []
(rest [1])
=> []
(rest [1 2 3])
=> [2 3]
(rest '())
=> ()
(rest '(1))
=> ()
(rest '(1 2 3))
=> (2 3)
                                    
                                 
                                
                                    
                                    restart-agent
                                     
                                        
                                         (restart-agent agent state)                          
                                        
                                     
                                    
                                        When an agent is failed, changes the agent state to new-state and then un-fails the agent so that sends are allowed again.
                                    
                                    
                                        (do                          
   (def x (agent 100))       
   (restart-agent x 200)     
   (deref x))                  
=> 200
                                    
                                 
                                
                                    
                                    reverse
                                     
                                    
                                        Returns a collection of the items in coll in reverse order
                                    
                                    
                                        (reverse [1 2 3 4 5 6])
=> [6 5 4 3 2 1]
                                    
                                 
                                
                                    
                                    sandboxed?
                                     
                                    
                                        Returns true if there is a sandbox otherwise false
                                    
                                    
                                        (sandboxed? )
=> false
                                    
                                 
                                
                                    
                                    schedule-at-fixed-rate
                                     
                                        
                                         (schedule-at-fixed-rate fn initial-delay period time-unit)                          
                                        
                                     
                                    
                                        Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given period. 
Returns a future. (future? f), (future-cancel f), and (future-done? f) will work on the returned future. 
Time unit is one of :milliseconds, :seconds, :minutes, :hours, or :days. 
                                    
                                    
                                        (schedule-at-fixed-rate (fn[] (println "test")) 1 2 :seconds)
(let [s (schedule-at-fixed-rate (fn[] (println "test")) 1 2 :seconds)] 
   (sleep 16 :seconds) 
   (future-cancel s))
                                    
                                 
                                
                                    
                                    schedule-delay
                                     
                                        
                                         (schedule-delay fn delay time-unit)                          
                                        
                                     
                                    
                                        Creates and executes a one-shot action that becomes enabled after the given delay. 
Returns a future. (deref f), (future? f), (future-cancel f), and (future-done? f) will work on the returned future. 
Time unit is one of :milliseconds, :seconds, :minutes, :hours, or :days. 
                                    
                                    
                                        (schedule-delay (fn[] (println "test")) 1 :seconds)
(deref (schedule-delay (fn [] 100) 2 :seconds))
                                    
                                 
                                
                                    
                                    second
                                     
                                    
                                        Returns the second element of coll.
                                    
                                    
                                        (second nil)
=> nil
(second [])
=> nil
(second [1 2 3])
=> 2
(second '())
=> nil
(second '(1 2 3))
=> 2
                                    
                                 
                                
                                    
                                    send
                                     
                                        
                                         (send agent action-fn args)                          
                                        
                                     
                                    
                                        Dispatch an action to an agent. Returns the agent immediately.The state of the agent will be set to the value of:
 (apply action-fn state-of-agent args)
                                    
                                    
                                        (do                         
   (def x (agent 100))      
   (send x + 5)             
   (sleep 100)              
   (deref x))                 
=> 105
                                    
                                 
                                
                                    
                                    send-off
                                     
                                    
                                        Dispatch a potentially blocking action to an agent. Returns the agent immediately. The state of the agent will be set to the value of:
 (apply action-fn state-of-agent args)
                                    
                                    
                                        (do                         
   (def x (agent 100))      
   (send-off x + 5)         
   (sleep 100)              
   (deref x))                 
=> 105
                                    
                                 
                                
                                    
                                    seq
                                     
                                    
                                        Returns a seq on the collection. If the collection is empty, returns nil. (seq nil) returns nil. seq also works on Strings.
                                    
                                    
                                        (seq nil)
=> nil
(seq [1 2 3])
=> (1 2 3)
(seq '(1 2 3))
=> (1 2 3)
(seq {:a 1 :b 2})
=> ([:a 1] [:b 2])
(seq "abcd")
=> ("a" "b" "c" "d")
                                    
                                 
                                
                                    
                                    sequential?
                                     
                                    
                                        Returns true if obj is a sequential collection
                                    
                                    
                                        (sequential? '(1))
=> true
(sequential? [1])
=> true
(sequential? {:a 1})
=> false
(sequential? nil)
=> false
(sequential? "abc")
=> false
                                    
                                 
                                
                                    
                                    set
                                     
                                    
                                        Creates a new set containing the items.
                                    
                                    
                                        (set )
=> #{}
(set nil)
=> #{nil}
(set 1)
=> #{1}
(set 1 2 3)
=> #{1 2 3}
(set [1 2] 3)
=> #{[1 2] 3}
                                    
                                 
                                
                                    
                                    set!
                                     
                                    
                                        Sets a global or thread-local variable to the value of the expression.
                                    
                                    
                                        (do                             
  (def x 10)                    
  (set! x 20)                   
  x)                              
=> 20
(do                             
   (def-dynamic x 100)          
   (set! x 200)                 
   x)                             
=> 200
(do                             
   (def-dynamic x 100)          
   (with-out-str                
      (print x)                 
      (binding [x 200]          
        (print (str "-" x))   
        (set! x (inc x))        
        (print (str "-" x)))  
      (print (str "-" x))))     
=> "100-200-201-100"
                                    
                                 
                                
                                    
                                    set-error-handler!
                                     
                                        
                                         (set-error-handler! agent handler-fn)                          
                                        
                                     
                                    
                                        Sets the error-handler of an agent to handler-fn. If an action being run by the agent throws an exception handler-fn will be called with two arguments: the agent and the exception.
                                    
                                    
                                        (do                                          
   (def x (agent 100))                       
   (defn err-handler-fn [ag ex]              
      (println "error occured: "           
               (:message ex)                 
               " and we still have value"  
               @ag))                         
   (set-error-handler! x err-handler-fn)     
   (send x (fn [n] (/ n 0))))                  
=> (agent :value 100)
                                    
                                 
                                
                                    
                                    set?
                                     
                                    
                                        Returns true if obj is a set
                                    
                                    
                                        (set? (set 1))
=> true
                                    
                                 
                                
                                    
                                    sh
                                     
                                    
                                        Passes the given strings to Runtime.exec() to launch a sub-process.
Options are
  :in        may be given followed by input source as InputStream,
             Reader, File, ByteBuf, or String, to be fed to the
             sub-process's stdin.
  :in-enc    option may be given followed by a String, used as a
             character encoding name (for example "UTF-8" or
             "ISO-8859-1") to convert the input string specified
             by the :in option to the sub-process's stdin. Defaults
             to UTF-8. If the :in option provides a byte array,
             then the bytes are passed unencoded, and this option
             is ignored.
  :out-enc   option may be given followed by :bytes or a String. If
             a String is given, it will be used as a character
             encoding name (for example "UTF-8" or "ISO-8859-1")
             to convert the sub-process's stdout to a String which is
             returned. If :bytes is given, the sub-process's stdout
             will be stored in a Bytebuf and returned. Defaults to
             UTF-8.
  :env       override the process env with a map.
  :dir       override the process dir with a String or java.io.File.
  :throw-ex  If true throw an exception if the exit code is not equal
             to zero, if false returns the exit code. Defaults to
             false. It's recommended to use (with-sh-throw (sh "foo"))
             instead.
You can bind :env, :dir for multiple operations using with-sh-env or
with-sh-dir. with-sh-throw is binds :throw-ex as true.
sh returns a map of
  :exit => sub-process's exit code
  :out  => sub-process's stdout (as Bytebuf or String)
  :err  => sub-process's stderr (String via platform default encoding)
                                    
                                    
                                        (println (sh "ls" "-l"))
(println (sh "ls" "-l" "/tmp"))
(println (sh "sed" "s/[aeiou]/oo/g" :in "hello there\n"))
(println (sh "cat" :in "x\u25bax\n"))
(println (sh "echo" "x\u25bax"))
(println (sh "/bin/sh" "-c" "ls -l"))
;; reads 4 single-byte chars
(println (sh "echo" "x\u25bax" :out-enc "ISO-8859-1"))
;; reads binary file into bytes[]
(println (sh "cat" "birds.jpg" :out-enc :bytes))
;; working directory
(println (with-sh-dir "/tmp" (sh "ls" "-l") (sh "pwd")))
(println (sh "pwd" :dir "/tmp"))
;; throw an exception if the shell's subprocess exit code is not equal to 0
(println (with-sh-throw (sh "ls" "-l")))
(println (sh "ls" "-l" :throw-ex true))
;; windows
(println (sh "cmd" "/c dir 1>&2"))
                                    
                                 
                                
                                    
                                    shutdown-agents
                                     
                                    
                                        Initiates a shutdown of the thread pools that back the agent system. Running actions will complete, but no new actions will been accepted
                                    
                                    
                                        (do                           
   (def x1 (agent 100))       
   (def x2 (agent 100))       
   (shutdown-agents ))          
                                    
                                 
                                
                                    
                                    shutdown-agents?
                                     
                                    
                                        Returns true if the thread-pool that backs the agents is shut down
                                    
                                    
                                        (do                           
   (def x1 (agent 100))       
   (def x2 (agent 100))       
   (shutdown-agents )         
   (sleep 300)                
   (shutdown-agents? ))         
                                    
                                 
                                
                                    
                                    shutdown-hook
                                     
                                    
                                        Registers the function f as JVM shutdown hook.
                                    
                                    
                                        (shutdown-hook (fn [] (println "shutdown")))
=> nil
                                    
                                 
                                
                                    
                                    sleep
                                     
                                        
                                         (sleep n)(sleep n time-unit)                          
                                        
                                     
                                    
                                        Sleep for the time n. The default time unit is milliseconds 
Time unit is one of :milliseconds, :seconds, :minutes, :hours, or :days. 
                                    
                                    
                                        (sleep 30)
=> nil
(sleep 30 :milliseconds)
=> nil
(sleep 5 :seconds)
=> nil
                                    
                                 
                                
                                    
                                    some?
                                     
                                    
                                        Returns true if x is not nil, false otherwise
                                    
                                    
                                        (some? nil)
=> false
(some? 0)
=> true
(some? 4.0)
=> true
(some? false)
=> true
(some? [])
=> true
(some? {})
=> true
                                    
                                 
                                
                                    
                                    sort
                                     
                                        
                                         (sort coll)(sort comparefn coll)                          
                                        
                                     
                                    
                                        Returns a sorted list of the items in coll. If no compare function comparefn is supplied, uses the natural compare. The compare function takes two arguments and returns -1, 0, or 1
                                    
                                    
                                        (sort [3 2 5 4 1 6])
=> [1 2 3 4 5 6]
(sort compare [3 2 5 4 1 6])
=> [1 2 3 4 5 6]
; reversed
(sort (comp (partial * -1) compare) [3 2 5 4 1 6])
=> [6 5 4 3 2 1]
(sort {:c 3 :a 1 :b 2})
=> ([:a 1] [:b 2] [:c 3])
                                    
                                 
                                
                                    
                                    sort-by
                                     
                                        
                                         (sort-by keyfn coll)(sort-by keyfn compfn coll)                          
                                        
                                     
                                    
                                        Returns a sorted sequence of the items in coll, where the sort order is determined by comparing (keyfn item).  If no comparator is supplied, uses compare.
                                    
                                    
                                        (sort-by count ["aaa" "bb" "c"])
=> ["c" "bb" "aaa"]
; reversed
(sort-by count (comp (partial * -1) compare) ["aaa" "bb" "c"])
=> ["aaa" "bb" "c"]
(sort-by first [[1 2] [3 4] [2 3]])
=> [[1 2] [2 3] [3 4]]
; reversed
(sort-by first (comp (partial * -1) compare) [[1 2] [3 4] [2 3]])
=> [[3 4] [2 3] [1 2]]
(sort-by (fn [x] (get x :rank)) [{:rank 2} {:rank 3} {:rank 1}])
=> [{:rank 1} {:rank 2} {:rank 3}]
; reversed
(sort-by (fn [x] (get x :rank)) (comp (partial * -1) compare) [{:rank 2} {:rank 3} {:rank 1}])
=> [{:rank 3} {:rank 2} {:rank 1}]
                                    
                                 
                                
                                    
                                    sorted-map
                                     
                                        
                                         (sorted-map & keyvals)(sorted-map map)                          
                                        
                                     
                                    
                                        Creates a new sorted map containing the items.
                                    
                                    
                                        (sorted-map :a 1 :b 2)
=> {:a 1 :b 2}
(sorted-map (hash-map :a 1 :b 2))
=> {:a 1 :b 2}
                                    
                                 
                                
                                    
                                    sorted-map?
                                     
                                    
                                        Returns true if obj is a sorted map
                                    
                                    
                                        (sorted-map? (sorted-map :a 1 :b 2))
=> true
                                    
                                 
                                
                                    
                                    sorted-set
                                     
                                    
                                        Creates a new sorted-set containing the items.
                                    
                                    
                                        (sorted-set )
=> #{}
(sorted-set nil)
=> #{nil}
(sorted-set 1)
=> #{1}
(sorted-set 6 2 4)
=> #{2 4 6}
(str (sorted-set [2 3] [1 2]))
=> "#{[1 2] [2 3]}"
                                    
                                 
                                
                                    
                                    sorted-set?
                                     
                                    
                                        Returns true if obj is a sorted-set
                                    
                                    
                                        (sorted-set? (set 1))
=> false
                                    
                                 
                                
                                    
                                    split-at
                                     
                                    
                                        Returns a vector of [(take n coll) (drop n coll)]
                                    
                                    
                                        (split-at 2 [1 2 3 4 5])
=> [(1 2) (3 4 5)]
(split-at 3 [1 2])
=> [(1 2) ()]
                                    
                                 
                                
                                    
                                    split-with
                                     
                                    
                                        Splits the collection at the first false/nil predicate result in a vector with two lists
                                    
                                    
                                        (split-with odd? [1 3 5 6 7 9])
=> [(1 3 5) (6 7 9)]
(split-with odd? [1 3 5])
=> [(1 3 5) ()]
(split-with odd? [2 4 6])
=> [() (2 4 6)]
                                    
                                 
                                
                                    
                                    sqrt
                                     
                                    
                                        Square root of x
                                    
                                    
                                        (sqrt 10)
=> 3.1622776601683795
(sqrt (int 10))
=> 3.1622776601683795
(sqrt 10.23)
=> 3.1984371183438953
(sqrt 10.23M)
=> 3.198437118343895324557024650857783854007720947265625M
                                    
                                 
                                
                                    
                                    stack
                                     
                                    
                                        Creates a new mutable threadsafe stack.
                                    
                                    
                                        (let [s (stack)]
   (push! s 4)
   (push! s 3)
   (pop! s)
   s)
=> (4)
                                    
                                 
                                
                                    
                                    stack?
                                     
                                    
                                        Returns true if obj is a stack
                                    
                                    
                                        (stack? (stack))
=> true
                                    
                                 
                                
                                    
                                    str
                                     
                                    
                                        With no args, returns the empty string. With one arg x, returns x.toString(). (str nil) returns the empty string. With more than one arg, returns the concatenation of the str values of the args.
                                    
                                    
                                        (str )
=> ""
(str 1 2 3)
=> "123"
(str +)
=> "function + {visibility :public, module \"core\"}"
(str [1 2 3])
=> "[1 2 3]"
                                    
                                 
                                
                                    
                                    str/blank?
                                     
                                    
                                        True if s is blank.
                                    
                                    
                                        (str/blank? nil)
=> true
(str/blank? "")
=> true
(str/blank? "  ")
=> true
(str/blank? "abc")
=> false
                                    
                                 
                                
                                    
                                    str/bytebuf-to-hex
                                     
                                        
                                         (str/bytebuf-to-hex data)(str/bytebuf-to-hex data :upper)                          
                                        
                                     
                                    
                                        Converts byte data to a hex string using the hexadecimal digits: 0123456789abcdef. 
If the :upper options is passed the hex digits 0123456789ABCDEF are used.
                                    
                                    
                                        (str/bytebuf-to-hex (bytebuf [0 1 2 3 4 5 6]))
=> "00010203040506"
                                    
                                 
                                
                                    
                                    str/char
                                     
                                    
                                        Converts a number to a single char string.
                                    
                                    
                                        (str/char 65)
=> "A"
                                    
                                 
                                
                                    
                                    str/contains?
                                     
                                    
                                        True if s contains with substr.
                                    
                                    
                                        (str/contains? "abc"  "ab")
=> true
                                    
                                 
                                
                                    
                                    str/decode-base64
                                     
                                    
                                        Base64 decode.
                                    
                                    
                                        (str/decode-base64 (str/encode-base64 (bytebuf [0 1 2 3 4 5 6])))
=> [0 1 2 3 4 5 6]
                                    
                                 
                                
                                    
                                    str/decode-url
                                     
                                    
                                        URL decode.
                                    
                                    
                                        (str/decode-url "The+string+%C3%BC%40foo-bar")
=> "The string ü@foo-bar"
                                    
                                 
                                
                                    
                                    str/digit?
                                     
                                    
                                        True if s is a single char string and the char is a digit. Defined by Java Character.isDigit(ch).
                                    
                                    
                                        (str/digit? "8")
=> true
                                    
                                 
                                
                                    
                                    str/double-quote
                                     
                                    
                                        Double quotes a string.
                                    
                                    
                                        (str/double-quote "abc")
=> "\"abc\""
(str/double-quote "")
=> "\"\""
                                    
                                 
                                
                                    
                                    str/encode-base64
                                     
                                    
                                        Base64 encode.
                                    
                                    
                                        (str/encode-base64 (bytebuf [0 1 2 3 4 5 6]))
=> "AAECAwQFBg=="
                                    
                                 
                                
                                    
                                    str/encode-url
                                     
                                    
                                        URL encode.
                                    
                                    
                                        (str/encode-url "The string ü@foo-bar")
=> "The+string+%C3%BC%40foo-bar"
                                    
                                 
                                
                                    
                                    str/ends-with?
                                     
                                        
                                         (str/ends-with? s substr)                          
                                        
                                     
                                    
                                        True if s ends with substr.
                                    
                                    
                                        (str/starts-with? "abc"  "bc")
=> false
                                    
                                 
                                
                                    
                                    str/equals-ignore-case?
                                     
                                        
                                         (str/equals-ignore-case? s1 s2)                          
                                        
                                     
                                    
                                        Compares two strings ignoring case.  True if both are equal.
                                    
                                    
                                        (str/equals-ignore-case? "abc"  "abC")
=> true
                                    
                                 
                                
                                    
                                    str/escape-html
                                     
                                    
                                        HTML escape. Escapes &, <, >, ", ', and the non blocking space U+00A0
                                    
                                    
                                        (str/escape-html "1 2 3 & < > \" ' \u00A0")
=> "1 2 3 & < > " '  "
                                    
                                 
                                
                                    
                                    str/escape-xml
                                     
                                    
                                        XML escape. Escapes &, <, >, ", '
                                    
                                    
                                        (str/escape-xml "1 2 3 & < > \" '")
=> "1 2 3 & < > " '"
                                    
                                 
                                
                                    
                                    str/format
                                     
                                        
                                         (str/format format args*)(str/format locale format args*)                          
                                        
                                     
                                    
                                        Returns a formatted string using the specified format string and arguments.
                                    
                                    
                                        (str/format "value: %.4f" 1.45)
=> "value: 1.4500"
(str/format (. :java.util.Locale :new "de" "DE") "value: %.4f" 1.45)
=> "value: 1,4500"
(str/format (. :java.util.Locale :GERMANY) "value: %.4f" 1.45)
=> "value: 1,4500"
(str/format [ "de"] "value: %.4f" 1.45)
=> "value: 1,4500"
(str/format [ "de" "DE"] "value: %.4f" 1.45)
=> "value: 1,4500"
                                    
                                 
                                
                                    
                                    str/format-bytebuf
                                     
                                        
                                         (str/format-bytebuf data delimiter & options)                          
                                        
                                     
                                    
                                        Formats a bytebuffer. 
Options 
  :prefix0x - prefix with 0x
                                    
                                    
                                        (str/format-bytebuf (bytebuf [0 34 67 -30 -1]) nil)
=> "002243E2FF"
(str/format-bytebuf (bytebuf [0 34 67 -30 -1]) "")
=> "002243E2FF"
(str/format-bytebuf (bytebuf [0 34 67 -30 -1]) ", ")
=> "00, 22, 43, E2, FF"
(str/format-bytebuf (bytebuf [0 34 67 -30 -1]) ", " :prefix0x)
=> "0x00, 0x22, 0x43, 0xE2, 0xFF"
                                    
                                 
                                
                                    
                                    str/hex-to-bytebuf
                                     
                                    
                                        Converts a hex string to a bytebuf
                                    
                                    
                                        (str/hex-to-bytebuf "005E4AFF")
=> [0 94 74 255]
(str/hex-to-bytebuf "005e4aff")
=> [0 94 74 255]
                                    
                                 
                                
                                    
                                    str/index-of
                                     
                                        
                                         (str/index-of s value)(str/index-of s value from-index)                          
                                        
                                     
                                    
                                        Return index of value (string or char) in s, optionally searching forward from from-index. Return nil if value not found.
                                    
                                    
                                        (str/index-of "abcdefabc" "ab")
=> 0
                                    
                                 
                                
                                    
                                    str/join
                                     
                                        
                                         (str/join coll)(str/join separator coll)                          
                                        
                                     
                                    
                                        Joins all elements in coll separated by an optional separator.
                                    
                                    
                                        (str/join [1 2 3])
=> "123"
(str/join "-" [1 2 3])
=> "1-2-3"
                                    
                                 
                                
                                    
                                    str/last-index-of
                                     
                                        
                                         (str/last-index-of s value)(str/last-index-of s value from-index)                          
                                        
                                     
                                    
                                        Return last index of value (string or char) in s, optionally searching backward from from-index. Return nil if value not found.
                                    
                                    
                                        (str/last-index-of "abcdefabc" "ab")
=> 6
                                    
                                 
                                
                                    
                                    str/letter?
                                     
                                    
                                        True if s is a single char string and the char is a letter. Defined by Java Character.isLetter(ch).
                                    
                                    
                                        (str/letter? "x")
=> true
                                    
                                 
                                
                                    
                                    str/linefeed?
                                     
                                    
                                        True if s is a single char string and the char is a linefeed.
                                    
                                    
                                        (str/linefeed? "
")
=> true
                                    
                                 
                                
                                    
                                    str/lower-case
                                     
                                    
                                        Converts s to lowercase
                                    
                                    
                                        (str/lower-case "aBcDeF")
=> "abcdef"
                                    
                                 
                                
                                    
                                    str/quote
                                     
                                        
                                         (str/quote str q)(str/quote str start end)                          
                                        
                                     
                                    
                                        Quotes a string.
                                    
                                    
                                        (str/quote "abc" "-")
=> "-abc-"
(str/quote "abc" "<" ">")
=> "<abc>"
                                    
                                 
                                
                                    
                                    str/repeat
                                     
                                        
                                         (str/repeat s n)(str/repeat s n sep)                          
                                        
                                     
                                    
                                        Repeats s n times with an optional separator.
                                    
                                    
                                        (str/repeat "abc" 0)
=> ""
(str/repeat "abc" 3)
=> "abcabcabc"
(str/repeat "abc" 3 "-")
=> "abc-abc-abc"
                                    
                                 
                                
                                    
                                    str/replace-all
                                     
                                        
                                         (str/replace-all s search replacement)                          
                                        
                                     
                                    
                                        Replaces the all occurrances of search in s. The search arg may be a string or a regex pattern
                                    
                                    
                                        (str/replace-all "abcdefabc" "ab" "__")
=> "__cdef__c"
(str/replace-all "a0b01c012d" (regex/pattern "[0-9]+") "_")
=> "a_b_c_d"
                                    
                                 
                                
                                    
                                    str/replace-first
                                     
                                        
                                         (str/replace-first s search replacement)                          
                                        
                                     
                                    
                                        Replaces the first occurrance of search in s. The search arg may be a string or a regex pattern
                                    
                                    
                                        (str/replace-first "abcdefabc" "ab" "XYZ")
=> "XYZdefabc"
(str/replace-first "a0b01c012d" (regex/pattern "[0-9]+") "_")
=> "a_b01c012d"
                                    
                                 
                                
                                    
                                    str/replace-last
                                     
                                        
                                         (str/replace-last s search replacement)                          
                                        
                                     
                                    
                                        Replaces the last occurrance of search in s
                                    
                                    
                                        (str/replace-last "abcdefabc" "ab" "XYZ")
=> "abcdefXYZ"
                                    
                                 
                                
                                    
                                    str/split
                                     
                                    
                                        Splits string on a regular expression.
                                    
                                    
                                        (str/split "abc,def,ghi" ",")
=> ("abc" "def" "ghi")
(str/split "abc , def , ghi" "[ *],[ *]")
=> ("abc" "def" "ghi")
(str/split "abc,def,ghi" "((?<=,)|(?=,))")
=> ("abc" "," "def" "," "ghi")
                                    
                                 
                                
                                    
                                    str/split-lines
                                     
                                    
                                        Splits s into lines.
                                    
                                    
                                        (str/split-lines "line1
line2
line3")
=> ("line1" "line2" "line3")
                                    
                                 
                                
                                    
                                    str/starts-with?
                                     
                                        
                                         (str/starts-with? s substr)                          
                                        
                                     
                                    
                                        True if s starts with substr.
                                    
                                    
                                        (str/starts-with? "abc"  "ab")
=> true
                                    
                                 
                                
                                    
                                    str/strip-end
                                     
                                    
                                        Removes a substr only if it is at the end of a s, otherwise returns s.
                                    
                                    
                                        (str/strip-end "abcdef" "def")
=> "abc"
(str/strip-end "abcdef" "abc")
=> "abcdef"
                                    
                                 
                                
                                    
                                    str/strip-indent
                                     
                                    
                                        Strip the indent of a multi-line string. The first line's leading whitespaces define the indent.
                                    
                                    
                                        (str/strip-indent "  line1
    line2
    line3")
=> "line1\n  line2\n  line3"
                                    
                                 
                                
                                    
                                    str/strip-margin
                                     
                                    
                                        Strips leading whitespaces upto and including the margin '|' from each line in a multi-line string.
                                    
                                    
                                        (str/strip-margin "line1
  |  line2
  |  line3")
=> "line1\n  line2\n  line3"
                                    
                                 
                                
                                    
                                    str/strip-start
                                     
                                        
                                         (str/strip-start s substr)                          
                                        
                                     
                                    
                                        Removes a substr only if it is at the beginning of a s, otherwise returns s.
                                    
                                    
                                        (str/strip-start "abcdef" "abc")
=> "def"
(str/strip-start "abcdef" "def")
=> "abcdef"
                                    
                                 
                                
                                    
                                    str/subs
                                     
                                        
                                         (str/subs s start)(str/subs s start end)                          
                                        
                                     
                                    
                                        Returns the substring of s beginning at start inclusive, and ending at end (defaults to length of string), exclusive.
                                    
                                    
                                        (str/subs "abcdef" 2)
=> "cdef"
(str/subs "abcdef" 2 5)
=> "cde"
                                    
                                 
                                
                                    
                                    str/trim
                                     
                                    
                                        Trims leading and trailing spaces from s.
                                    
                                    
                                        (str/trim " abc  ")
=> "abc"
                                    
                                 
                                
                                    
                                    str/trim-to-nil
                                     
                                    
                                        Trims leading and trailing spaces from s. Returns nil if the resulting string is empty
                                    
                                    
                                        (str/trim-to-nil "")
=> nil
(str/trim-to-nil "    ")
=> nil
(str/trim-to-nil nil)
=> nil
(str/trim-to-nil " abc   ")
=> "abc"
                                    
                                 
                                
                                    
                                    str/truncate
                                     
                                        
                                         (str/truncate s maxlen marker)                          
                                        
                                     
                                    
                                        Truncates a string to the max lenght maxlen and adds the marker to the end if the string needs to be truncated
                                    
                                    
                                        (str/truncate "abcdefghij" 20 "...")
=> "abcdefghij"
(str/truncate "abcdefghij" 9 "...")
=> "abcdef..."
(str/truncate "abcdefghij" 4 "...")
=> "a..."
                                    
                                 
                                
                                    
                                    str/upper-case
                                     
                                    
                                        Converts s to uppercase
                                    
                                    
                                        (str/upper-case "aBcDeF")
=> "ABCDEF"
                                    
                                 
                                
                                    
                                    str/whitespace?
                                     
                                    
                                        True if s is a single char string and the char is a whitespace. Defined by Java Character.isWhitespace(ch).
                                    
                                    
                                        (str/whitespace? " ")
=> true
                                    
                                 
                                
                                    
                                    string-array
                                     
                                        
                                         (string-array coll)(string-array len)(string-array len init-val)                          
                                        
                                     
                                    
                                        Returns an array of Java strings containing the contents of coll or returns an array with the given length and optional init value
                                    
                                    
                                        (string-array '("1" "2" "3"))
=> ["1", "2", "3"]
(string-array 10)
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
(string-array 10 "42")
=> ["42", "42", "42", "42", "42", "42", "42", "42", "42", "42"]
                                    
                                 
                                
                                    
                                    string?
                                     
                                    
                                        Returns true if x is a string
                                    
                                    
                                        (bytebuf? (bytebuf [1 2]))
=> true
(bytebuf? [1 2])
=> false
(bytebuf? nil)
=> false
                                    
                                 
                                
                                    
                                    subvec
                                     
                                        
                                         (subvec v start) (subvec v start end)                          
                                        
                                     
                                    
                                        Returns a vector of the items in vector from start (inclusive) to end (exclusive). If end is not supplied, defaults to (count vector)
                                    
                                    
                                        (subvec [1 2 3 4 5 6] 2)
=> [3 4 5 6]
(subvec [1 2 3 4 5 6] 4)
=> [5 6]
                                    
                                 
                                
                                    
                                    swap!
                                     
                                    
                                        Atomically swaps the value of atom to be: (apply f current-value-of-atom args). Note that f may be called multiple times, and thus should be free of side effects.  Returns the value that was swapped in.
                                    
                                    
                                        (do
   (def counter (atom 0))
   (swap! counter inc)
   (deref counter))
=> 1
                                    
                                 
                                
                                    
                                    symbol
                                     
                                    
                                        Returns a symbol from the given name
                                    
                                    
                                        (symbol "a")
=> a
(symbol 'a)
=> a
                                    
                                 
                                
                                    
                                    symbol?
                                     
                                    
                                        Returns true if x is a symbol
                                    
                                    
                                        (symbol? (symbol "a"))
=> true
(symbol? 'a)
=> true
(symbol? nil)
=> false
(symbol? :a)
=> false
                                    
                                 
                                
                                    
                                    system-prop
                                     
                                        
                                         (system-prop name default-val)                          
                                        
                                     
                                    
                                        Returns the system property with the given name. Returns the default-val if the property does not exist or it's value is nil
                                    
                                    
                                        (system-prop :os.name)
=> "Mac OS X"
(system-prop :foo.org "abc")
=> "abc"
(system-prop "os.name")
=> "Mac OS X"
                                    
                                 
                                
                                    
                                    take
                                     
                                    
                                        Returns a collection of the first n items in coll, or all items if there are fewer than n.
                                    
                                    
                                        (take 3 [1 2 3 4 5])
=> [1 2 3]
(take 10 [1 2 3 4 5])
=> [1 2 3 4 5]
                                    
                                 
                                
                                    
                                    take-while
                                     
                                        
                                         (take-while predicate coll)                          
                                        
                                     
                                    
                                        Returns a list of successive items from coll while (predicate item) returns logical true.
                                    
                                    
                                        (take-while neg? [-2 -1 0 1 2 3])
=> [-2 -1]
                                    
                                 
                                
                                    
                                    third
                                     
                                    
                                        Returns the third element of coll.
                                    
                                    
                                        (third nil)
=> nil
(third [])
=> nil
(second [1 2 3])
=> 2
(third '())
=> nil
(third '(1 2 3))
=> 3
                                    
                                 
                                
                                    
                                    thread-id
                                     
                                    
                                        Returns the identifier of this Thread. The thread ID is a positive number generated when this thread was created. The thread ID  is unique and remains unchanged during its lifetime. When a thread is terminated, this thread ID may be reused.
                                    
                                    
                                        (thread-id)
=> 1
                                    
                                 
                                
                                    
                                    thread-local
                                     
                                    
                                        Creates a new thread-local accessor
                                    
                                    
                                        (thread-local :a 1 :b 2)
=> ThreadLocal
(thread-local { :a 1 :b 2 })
=> ThreadLocal
(do 
   (thread-local-clear) 
   (assoc (thread-local) :a 1 :b 2) 
   (dissoc (thread-local) :a) 
   (get (thread-local) :b 100) 
)
=> 2
                                    
                                 
                                
                                    
                                    thread-local-clear
                                     
                                    
                                        Removes all thread local vars
                                    
                                    
                                        (thread-local-clear)
=> function thread-local-clear {visibility :public, module "core"}
                                    
                                 
                                
                                    
                                    thread-local?
                                     
                                    
                                        Returns true if x is a thread-local, otherwise false
                                    
                                    
                                        (do
   (def x (thread-local))
   (thread-local? x))
=> true
                                    
                                 
                                
                                    
                                    thread-name
                                     
                                    
                                        Returns this thread's name.
                                    
                                    
                                        (thread-name)
=> "main"
                                    
                                 
                                
                                    
                                    throw
                                     
                                    
                                        Throws exception with passed value x
                                    
                                    
                                        (do                                                     
   (try                                                 
     (+ 100 200)                                        
     (catch :Exception ex (:message ex))))                
=> 300
(do                                                     
   (try                                                 
     (throw 100)                                        
     (catch :ValueException ex (:value ex))))             
=> 100
(do                                                     
   (try                                                 
      (throw [100 {:a 3}])                              
      (catch :ValueException ex (:value ex))            
      (finally (println "#finally"))))                  
#finally
=> [100 {:a 3}]
(do                                                     
   (import :java.lang.RuntimeException)                 
   (try                                                 
      (throw (. :RuntimeException :new "#test"))      
      (catch :RuntimeException ex (:message ex))))        
=> "#test"
;; Venice wraps thrown checked exceptions with a RuntimeException! 
(do                                                                
   (import :java.lang.RuntimeException)                            
   (import :java.io.IOException)                                   
   (try                                                            
      (throw (. :IOException :new "#test"))                      
      (catch :RuntimeException ex (:message (:cause ex)))))          
=> "#test"
                                    
                                 
                                
                                    
                                    time
                                     
                                    
                                        Evaluates expr and prints the time it took.  Returns the value of expr.
                                    
                                    
                                        (time (+ 100 200))
Elapsed time: 13.33 us
=> 300
                                    
                                 
                                
                                    
                                    time/after?
                                     
                                        
                                         (time/after? date1 date2)                          
                                        
                                     
                                    
                                        Returns true if date1 is after date2 else false
                                    
                                    
                                        (time/after? (time/local-date) (time/minus (time/local-date) :days 2))
=> true
                                    
                                 
                                
                                    
                                    time/before?
                                     
                                        
                                         (time/before? date1 date2)                          
                                        
                                     
                                    
                                        Returns true if date1 is before date2 else false
                                    
                                    
                                        (time/before? (time/local-date) (time/minus (time/local-date) :days 2))
=> false
                                    
                                 
                                
                                    
                                    time/date
                                     
                                    
                                        Creates a new date. A date is represented by 'java.util.Date'
                                    
                                    
                                        (time/date)
=> Mon Jun 24 19:37:41 CEST 2019
                                    
                                 
                                
                                    
                                    time/date?
                                     
                                    
                                        Returns true if date is a date else false
                                    
                                    
                                        (time/date? (time/date))
=> true
                                    
                                 
                                
                                    
                                    time/day-of-month
                                     
                                    
                                        Returns the day of the month (1..31)
                                    
                                    
                                        (time/day-of-month (time/local-date))
=> 24
(time/day-of-month (time/local-date-time))
=> 24
(time/day-of-month (time/zoned-date-time))
=> 24
                                    
                                 
                                
                                    
                                    time/day-of-week
                                     
                                    
                                        Returns the day of the week (:MONDAY ... :SUNDAY)
                                    
                                    
                                        (time/day-of-week (time/local-date))
=> :MONDAY
(time/day-of-week (time/local-date-time))
=> :MONDAY
(time/day-of-week (time/zoned-date-time))
=> :MONDAY
                                    
                                 
                                
                                    
                                    time/day-of-year
                                     
                                    
                                        Returns the day of the year (1..366)
                                    
                                    
                                        (time/day-of-year (time/local-date))
=> 175
(time/day-of-year (time/local-date-time))
=> 175
(time/day-of-year (time/zoned-date-time))
=> 175
                                    
                                 
                                
                                    
                                    time/earliest
                                     
                                    
                                        Returns the earliest date from a collection of dates. All dates must be of equal type. The coll may be empty or nil.
                                    
                                    
                                        (time/earliest [(time/local-date 2018 8 4) (time/local-date 2018 8 3)])
=> 2018-08-03
                                    
                                 
                                
                                    
                                    time/first-day-of-month
                                     
                                        
                                         (time/first-day-of-month date)                          
                                        
                                     
                                    
                                        Returns the first day of a month as a local-date.
                                    
                                    
                                        (time/first-day-of-month (time/local-date))
=> 2019-06-01
(time/first-day-of-month (time/local-date-time))
=> 2019-06-01
(time/first-day-of-month (time/zoned-date-time))
=> 2019-06-01
                                    
                                 
                                
                                    
                                    time/format
                                     
                                        
                                         (time/format date format locale?)(time/format date formatter locale?)                          
                                        
                                     
                                    
                                        Formats a date with a format
                                    
                                    
                                        (time/format (time/local-date) "dd-MM-yyyy")
=> "24-06-2019"
(time/format (time/zoned-date-time) "yyyy-MM-dd'T'HH:mm:ss.SSSz")
=> "2019-06-24T19:37:41.418CEST"
(time/format (time/zoned-date-time) :ISO_OFFSET_DATE_TIME)
=> "2019-06-24T19:37:41.423+02:00"
(time/format (time/zoned-date-time) (time/formatter "yyyy-MM-dd'T'HH:mm:ss.SSSz"))
=> "2019-06-24T19:37:41.428CEST"
(time/format (time/zoned-date-time) (time/formatter :ISO_OFFSET_DATE_TIME))
=> "2019-06-24T19:37:41.432+02:00"
                                    
                                 
                                
                                    
                                    time/formatter
                                     
                                        
                                         (time/formatter format locale?)                          
                                        
                                     
                                    
                                        Creates a formatter
                                    
                                    
                                        (time/formatter "dd-MM-yyyy")
=> Value(DayOfMonth,2)'-'Value(MonthOfYear,2)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)
(time/formatter "dd-MM-yyyy" :en_EN)
=> Value(DayOfMonth,2)'-'Value(MonthOfYear,2)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)
(time/formatter "dd-MM-yyyy" "en_EN")
=> Value(DayOfMonth,2)'-'Value(MonthOfYear,2)'-'Value(YearOfEra,4,19,EXCEEDS_PAD)
(time/formatter "yyyy-MM-dd'T'HH:mm:ss.SSSz")
=> Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)'.'Fraction(NanoOfSecond,3,3)ZoneText(SHORT)
(time/formatter :ISO_OFFSET_DATE_TIME)
=> ParseCaseSensitive(false)(ParseCaseSensitive(false)(Value(Year,4,10,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2))'T'(Value(HourOfDay,2)':'Value(MinuteOfHour,2)[':'Value(SecondOfMinute,2)[Fraction(NanoOfSecond,0,9,DecimalPoint)]]))Offset(+HH:MM:ss,'Z')
                                    
                                 
                                
                                    
                                    time/hour
                                     
                                    
                                        Returns the hour of the date 1..24
                                    
                                    
                                        (time/hour (time/local-date))
=> 0
(time/hour (time/local-date-time))
=> 19
(time/hour (time/zoned-date-time))
=> 19
                                    
                                 
                                
                                    
                                    time/last-day-of-month
                                     
                                        
                                         (time/last-day-of-month date)                          
                                        
                                     
                                    
                                        Returns the last day of a month as a local-date.
                                    
                                    
                                        (time/last-day-of-month (time/local-date))
=> 2019-06-30
(time/last-day-of-month (time/local-date-time))
=> 2019-06-30
(time/last-day-of-month (time/zoned-date-time))
=> 2019-06-30
                                    
                                 
                                
                                    
                                    time/latest
                                     
                                    
                                        Returns the latest date from a collection of dates. All dates must be of equal type. The coll may be empty or nil.
                                    
                                    
                                        (time/latest [(time/local-date 2018 8 1) (time/local-date 2018 8 3)])
=> 2018-08-03
                                    
                                 
                                
                                    
                                    time/leap-year?
                                     
                                    
                                        Checks if the year is a leap year.
                                    
                                    
                                        (time/leap-year? 2000)
=> true
(time/leap-year? (time/local-date 2000 1 1))
=> true
(time/leap-year? (time/local-date-time))
=> false
(time/leap-year? (time/zoned-date-time))
=> false
                                    
                                 
                                
                                    
                                    time/length-of-month
                                     
                                        
                                         (time/length-of-month date)                          
                                        
                                     
                                    
                                        Returns the length of the month represented by this date.
                                    
                                    
                                        (time/length-of-month (time/local-date 2000 2 1))
=> 29
(time/length-of-month (time/local-date 2001 2 1))
=> 28
(time/length-of-month (time/local-date-time))
=> 30
(time/length-of-month (time/zoned-date-time))
=> 30
                                    
                                 
                                
                                    
                                    time/length-of-year
                                     
                                        
                                         (time/length-of-year date)                          
                                        
                                     
                                    
                                        Returns the length of the year represented by this date.
                                    
                                    
                                        (time/length-of-year (time/local-date 2000 1 1))
=> 366
(time/length-of-year (time/local-date 2001 1 1))
=> 365
(time/length-of-year (time/local-date-time))
=> 365
(time/length-of-year (time/zoned-date-time))
=> 365
                                    
                                 
                                
                                    
                                    time/local-date
                                     
                                        
                                         (time/local-date)(time/local-date year month day)(time/local-date date)                          
                                        
                                     
                                    
                                        Creates a new local-date. A local-date is represented by 'java.time.LocalDate'
                                    
                                    
                                        (time/local-date)
=> 2019-06-24
(time/local-date 2018 8 1)
=> 2018-08-01
(time/local-date "2018-08-01")
=> 2018-08-01
(time/local-date 1375315200000)
=> 2013-08-01
(time/local-date (. :java.util.Date :new))
=> 2019-06-24
                                    
                                 
                                
                                    
                                    time/local-date-parse
                                     
                                        
                                         (time/local-date-parse str format locale?                          
                                        
                                     
                                    
                                        Parses a local-date.
                                    
                                    
                                        (time/local-date-parse "2018-08-01" "yyyy-MM-dd")
=> 2018-08-01
                                    
                                 
                                
                                    
                                    time/local-date-time
                                     
                                        
                                         (time/local-date-time)(time/local-date-time year month day)(time/local-date-time year month day hour minute second)(time/local-date-time year month day hour minute second millis)(time/local-date-time date)                          
                                        
                                     
                                    
                                        Creates a new local-date-time. A local-date-time is represented by 'java.time.LocalDateTime'
                                    
                                    
                                        (time/local-date-time)
=> 2019-06-24T19:37:41.141
(time/local-date-time 2018 8 1)
=> 2018-08-01T00:00
(time/local-date-time 2018 8 1 14 20 10)
=> 2018-08-01T14:20:10
(time/local-date-time 2018 8 1 14 20 10 200)
=> 2018-08-01T14:20:10.200
(time/local-date-time "2018-08-01T14:20:10.200")
=> 2018-08-01T14:20:10.200
(time/local-date-time 1375315200000)
=> 2013-08-01T02:00
(time/local-date-time (. :java.util.Date :new))
=> 2019-06-24T19:37:41.160
                                    
                                 
                                
                                    
                                    time/local-date-time-parse
                                     
                                        
                                         (time/local-date-time-parse str format locale?                          
                                        
                                     
                                    
                                        Parses a local-date-time.
                                    
                                    
                                        (time/local-date-time-parse "2018-08-01 14:20" "yyyy-MM-dd HH:mm")
=> 2018-08-01T14:20
(time/local-date-time-parse "2018-08-01 14:20:01.000" "yyyy-MM-dd HH:mm:ss.SSS")
=> 2018-08-01T14:20:01
                                    
                                 
                                
                                    
                                    time/local-date-time?
                                     
                                        
                                         (time/local-date-time? date)                          
                                        
                                     
                                    
                                        Returns true if date is a local-date-time else false
                                    
                                    
                                        (time/local-date-time? (time/local-date-time))
=> true
                                    
                                 
                                
                                    
                                    time/local-date?
                                     
                                    
                                        Returns true if date is a locale date else false
                                    
                                    
                                        (time/local-date? (time/local-date))
=> true
                                    
                                 
                                
                                    
                                    time/minus
                                     
                                    
                                        Subtracts the n units from the date. Units: {:years :months :weeks :days :hours :minutes :seconds :milliseconds}
                                    
                                    
                                        (time/minus (time/local-date) :days 2)
=> 2019-06-22
(time/minus (time/local-date-time) :days 2)
=> 2019-06-22T19:37:41.513
(time/minus (time/zoned-date-time) :days 2)
=> 2019-06-22T19:37:41.517+02:00[Europe/Zurich]
                                    
                                 
                                
                                    
                                    time/minute
                                     
                                    
                                        Returns the minute of the date 0..59
                                    
                                    
                                        (time/minute (time/local-date))
=> 0
(time/minute (time/local-date-time))
=> 37
(time/minute (time/zoned-date-time))
=> 37
                                    
                                 
                                
                                    
                                    time/month
                                     
                                    
                                        Returns the month of the date 1..12
                                    
                                    
                                        (time/month (time/local-date))
=> 6
(time/month (time/local-date-time))
=> 6
(time/month (time/zoned-date-time))
=> 6
                                    
                                 
                                
                                    
                                    time/not-after?
                                     
                                        
                                         (time/not-after? date1 date2)                          
                                        
                                     
                                    
                                        Returns true if date1 is not-after date2 else false
                                    
                                    
                                        (time/not-after? (time/local-date) (time/minus (time/local-date) :days 2))
=> false
                                    
                                 
                                
                                    
                                    time/not-before?
                                     
                                        
                                         (time/not-before? date1 date2)                          
                                        
                                     
                                    
                                        Returns true if date1 is not-before date2 else false
                                    
                                    
                                        (time/not-before? (time/local-date) (time/minus (time/local-date) :days 2))
=> true
                                    
                                 
                                
                                    
                                    time/period
                                     
                                        
                                         (time/period from to unit)                          
                                        
                                     
                                    
                                        Returns the period interval of two dates in the specified unit. Units: {:years :months :weeks :days :hours :minutes :seconds :milliseconds}
                                    
                                    
                                        (time/period (time/local-date) (time/plus (time/local-date) :days 3) :days)
=> 3
(time/period (time/local-date-time) (time/plus (time/local-date-time) :days 3) :days)
=> 3
(time/period (time/zoned-date-time) (time/plus (time/zoned-date-time) :days 3) :days)
=> 3
                                    
                                 
                                
                                    
                                    time/plus
                                     
                                    
                                        Adds the n units to the date. Units: {:years :months :weeks :days :hours :minutes :seconds :milliseconds}
                                    
                                    
                                        (time/plus (time/local-date) :days 2)
=> 2019-06-26
(time/plus (time/local-date-time) :days 2)
=> 2019-06-26T19:37:41.499
(time/plus (time/zoned-date-time) :days 2)
=> 2019-06-26T19:37:41.504+02:00[Europe/Zurich]
                                    
                                 
                                
                                    
                                    time/second
                                     
                                    
                                        Returns the second of the date 0..59
                                    
                                    
                                        (time/second (time/local-date))
=> 0
(time/second (time/local-date-time))
=> 41
(time/second (time/zoned-date-time))
=> 41
                                    
                                 
                                
                                    
                                    time/to-millis
                                     
                                    
                                        Converts the passed date to milliseconds since epoch
                                    
                                    
                                        (time/to-millis (time/local-date))
=> 1561327200000
                                    
                                 
                                
                                    
                                    time/with-time
                                     
                                        
                                         (time/with-time date hour minute second)(time/with-time date hour minute second millis)                          
                                        
                                     
                                    
                                        Sets the time of a date. Returns a new date
                                    
                                    
                                        (time/with-time (time/local-date) 22 00 15 333)
=> 2019-06-24T22:00:15.333
(time/with-time (time/local-date-time) 22 00 15 333)
=> 2019-06-24T22:00:15.333
(time/with-time (time/zoned-date-time) 22 00 15 333)
=> 2019-06-24T22:00:15.333+02:00[Europe/Zurich]
                                    
                                 
                                
                                    
                                    time/within?
                                     
                                        
                                         (time/within? date start end)                          
                                        
                                     
                                    
                                        Returns true if the date is after or equal to the start and is before or equal to the end. All three dates must be of the same type. The start and end date may each be nil meaning start is -infinity and end is +infinity.
                                    
                                    
                                        (time/within? (time/local-date 2018 8 4) (time/local-date 2018 8 1) (time/local-date 2018 8 31))
=> true
(time/within? (time/local-date 2018 7 4) (time/local-date 2018 8 1) (time/local-date 2018 8 31))
=> false
                                    
                                 
                                
                                    
                                    time/year
                                     
                                    
                                        Returns the year of the date
                                    
                                    
                                        (time/year (time/local-date))
=> 2019
(time/year (time/local-date-time))
=> 2019
(time/year (time/zoned-date-time))
=> 2019
                                    
                                 
                                
                                    
                                    time/zone
                                     
                                    
                                        Returns the zone of the date
                                    
                                    
                                        (time/zone (time/zoned-date-time))
=> :Europe/Zurich
                                    
                                 
                                
                                    
                                    time/zone-ids
                                     
                                    
                                        Returns all available zone ids with time offset
                                    
                                    
                                        (nfirst (seq (time/zone-ids)) 10)
=> ([:Africa/Abidjan "+00:00"] [:Africa/Accra "+00:00"] [:Africa/Addis_Ababa "+03:00"] [:Africa/Algiers "+01:00"] [:Africa/Asmara "+03:00"] [:Africa/Asmera "+03:00"] [:Africa/Bamako "+00:00"] [:Africa/Bangui "+01:00"] [:Africa/Banjul "+00:00"] [:Africa/Bissau "+00:00"])
                                    
                                 
                                
                                    
                                    time/zone-offset
                                     
                                    
                                        Returns the zone-offset of the date in minutes
                                    
                                    
                                        (time/zone-offset (time/zoned-date-time))
=> 120
                                    
                                 
                                
                                    
                                    time/zoned-date-time
                                     
                                        
                                         (time/zoned-date-time )(time/zoned-date-time year month day)(time/zoned-date-time year month day hour minute second)(time/zoned-date-time year month day hour minute second millis)(time/zoned-date-time date)(time/zoned-date-time zone-id)(time/zoned-date-time zone-id year month day)(time/zoned-date-time zone-id year month day hour minute second)(time/zoned-date-time zone-id year month day hour minute second millis)(time/zoned-date-time zone-id date)                          
                                        
                                     
                                    
                                        Creates a new zoned-date-time. A zoned-date-time is represented by 'java.time.ZonedDateTime'
                                    
                                    
                                        (time/zoned-date-time)
=> 2019-06-24T19:37:41.172+02:00[Europe/Zurich]
(time/zoned-date-time 2018 8 1)
=> 2018-08-01T00:00+02:00[Europe/Zurich]
(time/zoned-date-time 2018 8 1 14 20 10)
=> 2018-08-01T14:20:10+02:00[Europe/Zurich]
(time/zoned-date-time 2018 8 1 14 20 10 200)
=> 2018-08-01T14:20:10.200+02:00[Europe/Zurich]
(time/zoned-date-time "2018-08-01T14:20:10.200+01:00")
=> 2018-08-01T14:20:10.200+01:00
(time/zoned-date-time 1375315200000)
=> 2013-08-01T02:00+02:00[Europe/Zurich]
(time/zoned-date-time (. :java.util.Date :new))
=> 2019-06-24T19:37:41.191+02:00[Europe/Zurich]
(time/zoned-date-time :UTC)
=> 2019-06-24T17:37:41.194Z[UTC]
(time/zoned-date-time :UTC 2018 8 1)
=> 2018-08-01T00:00Z[UTC]
(time/zoned-date-time :UTC 2018 8 1 14 20 10)
=> 2018-08-01T14:20:10Z[UTC]
(time/zoned-date-time :UTC 2018 8 1 14 20 10 200)
=> 2018-08-01T14:20:10.200Z[UTC]
(time/zoned-date-time :UTC "2018-08-01T14:20:10.200+01:00")
=> 2018-08-01T14:20:10.200Z[UTC]
(time/zoned-date-time :UTC 1375315200000)
=> 2013-08-01T00:00Z[UTC]
(time/zoned-date-time :UTC (. :java.util.Date :new))
=> 2019-06-24T17:37:41.218Z[UTC]
                                    
                                 
                                
                                    
                                    time/zoned-date-time-parse
                                     
                                        
                                         (time/zoned-date-time-parse str format locale?                          
                                        
                                     
                                    
                                        Parses a zoned-date-time.
                                    
                                    
                                        (time/zoned-date-time-parse "2018-08-01T14:20:01+01:00" "yyyy-MM-dd'T'HH:mm:ssz")
=> 2018-08-01T14:20:01+01:00
(time/zoned-date-time-parse "2018-08-01T14:20:01.000+01:00" "yyyy-MM-dd'T'HH:mm:ss.SSSz")
=> 2018-08-01T14:20:01+01:00
(time/zoned-date-time-parse "2018-08-01T14:20:01.000+01:00" :ISO_OFFSET_DATE_TIME)
=> 2018-08-01T14:20:01+01:00
(time/zoned-date-time-parse "2018-08-01 14:20:01.000 +01:00" "yyyy-MM-dd' 'HH:mm:ss.SSS' 'z")
=> 2018-08-01T14:20:01+01:00
                                    
                                 
                                
                                    
                                    time/zoned-date-time?
                                     
                                        
                                         (time/zoned-date-time? date)                          
                                        
                                     
                                    
                                        Returns true if date is a zoned-date-time else false
                                    
                                    
                                        (time/zoned-date-time? (time/zoned-date-time))
=> true
                                    
                                 
                                
                                    
                                    true?
                                     
                                    
                                        Returns true if x is true, false otherwise
                                    
                                    
                                        (true? true)
=> true
(true? false)
=> false
(true? nil)
=> false
(true? 0)
=> false
(true? (== 1 1))
=> true
                                    
                                 
                                
                                    
                                    try
                                     
                                        
                                         (try expr)(try expr (catch exClass exSym expr))(try expr (catch exClass exSym expr) (finally expr))                          
                                        
                                     
                                    
                                        Exception handling: try - catch -finally 
                                    
                                    
                                        (try (throw))
=> JavaValueException: Venice value exception
(try                                      
   (throw "test message"))                
=> JavaValueException: Venice value exception
(try                                       
   (throw 100)                             
   (catch :java.lang.Exception ex -100))    
=> -100
(try                                       
   (throw 100)                             
   (finally (println "...finally")))       
...finally
=> JavaValueException: Venice value exception
(try                                       
   (throw 100)                             
   (catch :java.lang.Exception ex -100)    
   (finally (println "...finally")))       
...finally
=> -100
(do                                                  
   (import :java.lang.RuntimeException)              
   (try                                              
      (throw (. :RuntimeException :new "message")) 
      (catch :RuntimeException ex (:message ex))))   
=> "message"
(do                                                   
   (try                                               
      (throw [1 2 3])                                 
      (catch :ValueException ex (str (:value ex)))    
      (catch :RuntimeException ex "runtime ex")     
      (finally (println "...finally"))))             
...finally
=> "[1 2 3]"
                                    
                                 
                                
                                    
                                    try-with
                                     
                                        
                                         (try-with [bindings*] expr)(try-with [bindings*] expr (catch :java.lang.Exception ex expr))(try-with [bindings*] expr (catch :java.lang.Exception ex expr) (finally expr))                          
                                        
                                     
                                    
                                        try-with resources allows the declaration of resources to be used in a try block with the assurance that the resources will be closed after execution of that block. The resources declared must implement the Closeable or 
                                    
                                    
                                        (do                                                   
   (import :java.io.FileInputStream)                  
   (let [file (io/temp-file "test-", ".txt")]     
        (io/spit file "123456789" :append true)     
        (try-with [is (. :FileInputStream :new file)] 
           (io/slurp-stream is :binary false))))        
=> "123456789"
                                    
                                 
                                
                                    
                                    type
                                     
                                    
                                        Returns the type of x.
                                    
                                    
                                        (type 5)
=> :venice.Long
(type [1 2])
=> :venice.Vector
(type (. :java.math.BigInteger :valueOf 100))
=> :java.math.BigInteger
                                    
                                 
                                
                                    
                                    union
                                     
                                        
                                         (union s1)(union s1 s2)(union s1 s2 & sets)                          
                                        
                                     
                                    
                                        Return a set that is the union of the input sets
                                    
                                    
                                        (union (set 1 2 3))
=> #{1 2 3}
(union (set 1 2) (set 2 3))
=> #{1 2 3}
(union (set 1 2 3) (set 1 2) (set 1 4) (set 3))
=> #{1 2 3 4}
                                    
                                 
                                
                                    
                                    update
                                     
                                    
                                        Updates a value in an associative structure, where k is a key and f is a function that will take the old value return the new value. Returns a new structure.
                                    
                                    
                                        (update [] 0 (fn [x] 5))
=> [5]
(update [0 1 2] 0 (fn [x] 5))
=> [5 1 2]
(update [0 1 2] 0 (fn [x] (+ x 1)))
=> [1 1 2]
(update {} :a (fn [x] 5))
=> {:a 5}
(update {:a 0} :b (fn [x] 5))
=> {:a 0 :b 5}
(update {:a 0 :b 1} :a (fn [x] 5))
=> {:a 5 :b 1}
                                    
                                 
                                
                                    
                                    update!
                                     
                                    
                                        Updates a value in a mutable map, where k is a key and f is a function that will take the old value return the new value.
                                    
                                    
                                        (update! (mutable-map) :a (fn [x] 5))
=> {:a 5}
(update! (mutable-map :a 0) :b (fn [x] 5))
=> {:a 0 :b 5}
(update! (mutable-map :a 0 :b 1) :a (fn [x] 5))
=> {:a 5 :b 1}
                                    
                                 
                                
                                    
                                    uuid
                                     
                                    
                                        Generates a UUID.
                                    
                                    
                                        (uuid )
=> "abc68cd4-bc9b-4fb3-ad24-ff7499e55f4a"
                                    
                                 
                                
                                    
                                    val
                                     
                                    
                                        Returns the val of the map entry.
                                    
                                    
                                        (val (find {:a 1 :b 2} :b))
=> 2
                                    
                                 
                                
                                    
                                    vals
                                     
                                    
                                        Returns a collection of the map's values.
                                    
                                    
                                        (vals {:a 1 :b 2 :c 3})
=> (1 2 3)
                                    
                                 
                                
                                    
                                    vary-meta
                                     
                                    
                                        Returns a copy of the object obj, with (apply f (meta obj) args) as its metadata.
                                    
                                    
                                        
                                 
                                
                                    
                                    vector
                                     
                                    
                                        Creates a new vector containing the items.
                                    
                                    
                                        (vector )
=> []
(vector 1 2 3)
=> [1 2 3]
(vector 1 2 3 [:a :b])
=> [1 2 3 [:a :b]]
                                    
                                 
                                
                                    
                                    vector?
                                     
                                    
                                        Returns true if obj is a vector
                                    
                                    
                                        (vector? (vector 1 2))
=> true
(vector? [1 2])
=> true
                                    
                                 
                                
                                    
                                    version
                                     
                                    
                                        Returns the version.
                                    
                                    
                                        (version )
=> "1.5.10"
                                    
                                 
                                
                                    
                                    when
                                     
                                    
                                        Evaluates test. If logical true, evaluates body in an implicit do.
                                    
                                    
                                        (when (== 1 1) true)
=> true
                                    
                                 
                                
                                    
                                    when-not
                                     
                                    
                                        Evaluates test. If logical false, evaluates body in an implicit do.
                                    
                                    
                                        (when-not (== 1 2) true)
=> true
                                    
                                 
                                
                                    
                                    while
                                     
                                    
                                        Repeatedly executes body while test expression is true. Presumes some side-effect will cause test to become false/nil. Returns nil
                                    
                                    
                                        (do
   (def a (atom 5))
   (while (pos? (deref a))
          (do (println (deref a)) (swap! a dec))))
5
4
3
2
1
=> nil
                                    
                                 
                                
                                    
                                    with-meta
                                     
                                    
                                        Returns a copy of the object obj, with a map m as its metadata.
                                    
                                    
                                        
                                 
                                
                                    
                                    with-out-str
                                     
                                    
                                        Evaluates exprs in a context in which *out* is bound to a capturing output stream. Returns the string created by any nested printing calls.
                                    
                                    
                                        (with-out-str (println "a string"))
=> "a string\n"
                                    
                                 
                                
                                    
                                    with-sh-dir
                                     
                                        
                                         (with-sh-dir dir & forms)                          
                                        
                                     
                                    
                                        Sets the directory for use with sh, see sh for details.
                                    
                                    
                                        (with-sh-dir "/tmp" (sh "ls" "-l"))
                                    
                                 
                                
                                    
                                    with-sh-env
                                     
                                        
                                         (with-sh-env env & forms)                          
                                        
                                     
                                    
                                        Sets the environment for use with sh, see sh for details.
                                    
                                    
                                        (with-sh-env {"NAME" "foo"} (sh "ls" "-l"))
                                    
                                 
                                
                                    
                                    with-sh-throw
                                     
                                    
                                        If true throws an exception if the spawned shell process returns an exit code other than 0. If false return the exit code. Defaults to false. For use with sh, see sh for details.
                                    
                                    
                                        (with-sh-throw (sh "ls" "-l"))
                                    
                                 
                                
                                    
                                    xml/children
                                     
                                    
                                        Returns the children of the XML nodes collection
                                    
                                    
                                        (do
  (load-module :xml)
  (xml/children
    (list (xml/parse-str "<a><b>B</b></a>")))) 
=> ({:content ["B"] :tag "b"})
                                    
                                 
                                
                                    
                                    xml/parse
                                     
                                        
                                         (xml/parse s)(xml/parse s handler)                          
                                        
                                     
                                    
                                        Parses and loads the XML from the source s with the parser
XMLHandler handler. The source may be an InputSource, an
InputStream, a File, or a string describing an URI.
Returns a tree of XML element maps with the
keys :tag, :attrs, and :content.
                                    
                                    
                                        
                                 
                                
                                    
                                    xml/parse-str
                                     
                                        
                                         (xml/parse-str s)(xml/parse-str s handler)                          
                                        
                                     
                                    
                                        Parses an XML from the string s. Returns a tree of XML element
maps with the keys :tag, :attrs, and :content.
                                    
                                    
                                        (do
  (load-module :xml)
  (xml/parse-str "<a><b>B</b></a>")) 
=> {:content [{:content ["B"] :tag "b"}] :tag "a"}
                                    
                                 
                                
                                    
                                    xml/path->
                                     
                                    
                                        Applies the path to a node or a collection of nodes
                                    
                                    
                                        (do
  (load-module :xml)
  (let [nodes (xml/parse-str "<a><b><c>C</c></b></a>")
        path [(xml/tag= "b")
              (xml/tag= "c")
              xml/text
              first]]
    (xml/path-> path nodes))) 
=> "C"
                                    
                                 
                                
                                    
                                    xml/text
                                     
                                    
                                        Returns a list of text contents of the XML nodes collection
                                    
                                    
                                        (do
  (load-module :xml)
  (let [nodes (xml/parse-str "<a><b>B</b></a>")
        path [(xml/tag= "b")
              xml/text]]
    (xml/path-> path nodes))) 
=> ("B")
                                    
                                 
                                
                                    
                                    zero?
                                     
                                    
                                        Returns true if x zero else false
                                    
                                    
                                        (zero? 0)
=> true
(zero? 2)
=> false
(zero? (int 0))
=> true
(zero? 0.0)
=> true
(zero? 0.0M)
=> true
                                    
                                 
                                
                                    
                                    zipmap
                                     
                                    
                                        Returns a map with the keys mapped to the corresponding vals.
                                    
                                    
                                        (zipmap [:a :b :c :d :e] [1 2 3 4 5])
=> {:a 1 :b 2 :c 3 :d 4 :e 5}
(zipmap [:a :b :c] [1 2 3 4 5])
=> {:a 1 :b 2 :c 3}
                                    
                                 
                                
                                    
                                    {}
                                     
                                    
                                        Creates a hash map.
                                    
                                    
                                        {:a 10 :b 20}
=> {:a 10 :b 20}