Define function: (defn name [args...] body)
Define function that returns true or false: (defn name? [args...] body)
For example:
(defn add [x y] (+ x y))
(add 1 2)
Define list:
'(1 2 3 4)
(list 1 2 3 4)
Define set:
#{1 2 3 3 3 4 4 4 4}
(set '(1 2 3 3 3 4 4 4 4))
Define constant:
(let [name1 value1 ... nameN valueN] body)
List comprehension:
(for [x [0 1 2 3 4 5]
:let [y (* x 3)]
:when (even? y)]
y)
(conj collection elements)
- returns collection with elements added to 'optimal' end of collection. I.e. on list's head, and vector's tail.
(cons element list)
- return seq with elements added to the beginning of collection
(intersection set1 set1)
(union set1 set1)
(first *list*)
- returns first element of list
(last *list*)
- returns last element of list
(rest *list*)
- returns list without first element
(concat *list1* ... *listN*)
- returns list with all elements from all lists 1-N
(lazy-cat *list1* ... *listN*)
- returns list with all elements from all lists 1-N, but joining it self occurs only when needed
(str item1 item2 ... itemN)
- stringifies all items and returns concatenated items
(reverse *list*)
(mapcat function *list1* ... *listN*)
- applies function to each list and then concatenates all of them
(if bool-expression body-if-true body-if-false)
(when bool-expression body-if-true ... another-body-if-true)
- almost like if
but without else and with multiple functions to eval if condition is true.
(do body1 ... bodyN)
- run multiple functions one after another, result is return value of last function. Useful e.g. when printing some values inside function.
While-like loop, that runs as long as recur
function is called. In following example there will be 5 iterations.
(loop [i 0]
(when (< i 5)
(println i)
(recur (inc i))))
For-like loops:
(doseq [i (range 0 5)]
(println i))
(dorun (for [i (range 0 5)]
(println i)))
Firstly
(use 'clojure.test)
Then write some test cases:
(deftest is-1-equal-to-1
(is (= 1 1))
)
(deftest is-true-really-true
(is (= true true))
)
And finally run all tests:
(run-all-tests)