Categorieën: Alle - data - function - collection - conditionals

door robert ross 12 jaren geleden

355

Clojure Reference

The content delves into various aspects of Clojure, a functional programming language, with a focus on its key components and functionalities. It covers collections and sequences, emphasizing the importance of lazy evaluation and operations at the Java level.

Clojure Reference

Clojure

Data Modeling

Classes
Data Structure Manipulation
Deriving
Querying
STM

Program Flow

Function Composition
Iteration
Conditionals

Help

Legend
Lazy evaluation
Operates at Java level
I have outstanding questions
Glossary
seq - Short of sequence
coll - Short for collection

Debugging

clojure.tools.trace
Usage

(use 'clojure.tools.trace)


(trace (* 2 3)) ;; To trace a value


(trace tag (* 2 3)) ;; To trace a value and assign a trace tag


(deftrace fubar [x v] (+ x v)) ;; To trace a function call and its return value


(trace-forms (+ 1 3) (* 5 6) (/ 1 0))


(trace-ns myown.namespace) ;; To dynamically trace/untrace all fns in a name space (untrace-ns myown.namespace)


(trace-vars myown.namespace/fubar) ;; To dynamically trace/untrace specific fns (untrace-vars myown.namespace/fubar)

Leiningen Dependency Info [org.clojure/tools.trace "0.7.3"]

API Reference

special forms
def

(def symbol init?)


Creates and interns or locates a global var with the name of symbol and a namespace of value of the current namespace (*ns*). If init is supplied, it is evaluated, and the root binding of the var is set to the resulting value. If init is not supplied, the root binding of the var is unaffected. def always applies to the root binding, even if the var is thread-bound at the point where def is called. def yields the var itself (not its value). Throws an exception if symbol is already in the namespace and not mapped to an interned var. Since 1.3, def has allowed an optional doc-string: (def symbol doc-string? init?)


Any metadata on the symbol will be evaluated, and become metadata on the var itself. There are several metadata keys that have special interpretation:


:private a boolean indicating the access control for the var. If this key is not present, the default access is public (e.g. as if :private false).

:doc a string containing short (1-3 line) documentation for the var contents

:test a fn of no args that uses assert to check various operations. he var itself will be accessibly during evaluation of a literal fn in the metadata map.

:tag a symbol naming a class or a Class object that indicates the Java type of the object in the var, or its return value if the object is a fn.


In addition the compiler will place the following keys on the var:


:file string

:line int

:name simple symbol

:ns namespace in which var is interned

:macro true if var names a macro

:arglists a list of vector(s) of argument forms, as were supplied to defn

clojure.core
Z

zipmap

zipmap

function


Usage:

(zipmap keys vals)


Returns a map with the keys mapped to the corresponding vals.

W

with-bindings

with-bindings

macro


Usage:

(with-bindings binding-map & body)


Takes a map of Var/value pairs. Installs for the given Vars the associated values as thread-local bindings. Then executes body. Pops the installed bindings after body was evaluated. Returns the value of body.

while

while

macro


Usage:

(while test & body)


Repeatedly executes body while test expression is true. Presumes some side-effect will cause test to become false/nil. Returns nil

when-let

when-let

macro


Usage:

(when-let bindings & body)


bindings => binding-form test


When test is true, evaluates body with binding-form bound to the value of test.

when-first

when-first

macro


Usage:

(when-first bindings & body)


bindings => x xs


Same as (when (seq xs) (let [x (first xs)] body))

when

when

macro


Usage:

(when test & body)


Evaluates test. If logical true, evaluates body in an implicit do.

V

vector-of

vector-of

function


Usage:

(vector-of t)

(vector-of t & elements)


Creates a new vector of a single primitive type t, where t is one of :int :long :float :double :byte :short :char or :boolean. The resulting vector complies with the interface of vectors in general, but stores the values unboxed internally.

vector

vector

function


Usage:

(vector)

(vector a)

(vector a b)

(vector a b c)

(vector a b c d)

(vector a b c d & args)


Creates a new vector containing the args.

vec

vec

function


Usage:

(vec coll)


Creates a new vector containing the contents of coll.

vals

vals

function


Usage:

(vals map)


Returns a sequence of the map's values.

val

val

function


Usage:

(val e)


Returns the value in the map entry

U

use

use

function


Usage:

(use & args)


Like 'require, but also refers to each lib's namespace using clojure.core/refer. Use :use in the ns macro in preference to calling this directly.


'use accepts additional options in libspecs:

:exclude, :only, :rename

update-in

T

take-while

take-while

function


Usage:

(take-while pred coll)


Returns a lazy sequence of successive items from coll while (pred item) returns true. pred must be free of side-effects.

take-nth

take-nth

function


Usage:

(take-nth n coll)


Returns a lazy seq of every nth item in coll.

take-last

take-last

function


Usage:

(take-last n coll)


Returns a seq of the last n items in coll. Depending on the type of coll may be no better than linear time. For vectors, see also subvec.

take

take

function


Usage:

(take n coll)


Returns a lazy sequence of the first n items in coll, or all items if there are fewer than n.

S

subvec

subvec

function


Usage:

(subvec v start)

(subvec v start end)


Returns a persistent vector of the items in vector from start (inclusive) to end (exclusive). If end is not supplied defaults to (count vector). This operation is O(1) and very fast, as the resulting vector shares structures with the original and no trimming is done.

split-with

split-with

function


Usage:

(split-with pred coll)


Returns a vector of [(take-while pred coll) (drop-while pred coll)]

split-at

split-at

function


Usage:

(split-at n coll)


Returns a vector of [(take n coll) (drop n coll)]

sorted-map

sorted-map

function


Usage:

(sorted-map & keyvals)


keyval => key val


Returns a new sorted map with supplied mappings

sort-by

sort-by

function


Usage:

(sort-by keyfn coll)

(sort-by keyfn comp 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. comparator must implement java.util.Comparator.

sort

sort

function


Usage:

(sort coll)

(sort comp coll)


Returns a sorted sequence of the items in coll. If no comparator is supplied, uses compare. comparator must implement java.util.Comparator.

some-fn

some-fn

function


Usage:

(some-fn p)

(some-fn p1 p2)

(some-fn p1 p2 p3)

(some-fn p1 p2 p3 & ps)


Takes a set of predicates and returns a function f that returns the first logical true value returned by one of its composing predicates aganist any of its argumentns, else it returns logical false. Note that f is short-circuiting in that it will stop execution on the first argument that triggers a logical true result against the original predicates.

some

some

function


Usage:

(some pred coll)


Returns the first logical true value of (pred x) for any x in coll, else nil. One common idiom is to use a set as pred, for example this will return :fred if :fred is in the sequence, otherwise nil:

(some #{:fred} coll)

shuffle

shuffle

function


Usage:

(shuffle coll)


Return a random permutation of coll

select-keys

select-keys

function


Usage:

(select-keys map keyseq)


Returns a map containing only those entries in map whose key is in keys

second

second

function


Usage:

(second x)


Same as (first (next x))

satisfies?

satisfies?

function


Usage:

(satisfies? protocol x)


Returns true if x satisfies the protocol

R

reverse

reverse

function


Usage:

(reverse coll)


Returnss a seq of the items in coll in reverse order. Not lazy.

rest

rest

function


Usage:

(rest coll)


Returns a possibly empty seq of the items after the first. Calls seq on its argument.

reset!

reset!

function


Usage:

(reset! atom newval)


Sets the value of atom to newval without regard for the current value. Returns newval.

require

require

function


Usage:

(require & args)


Loads libs, skipping any that are already loaded. Each argument is either a libspec that identifies a lib, a prefix list that identifies multiple libs whose names share a common prefix, or a flag that modifies how all the identified libs are loaded. Use :require in the ns macro is preference to calling this directly.

replace

replace

function


Usage:

(replace smap coll)


Given a map of replacement pairs and a vector/collection, returns a vector/seq with any elements = a key in smap replaced with the corresponding val in smap.

repeatedly

repeatedly

function


Usage:

(repeatedly f)

(repeatedly n f)


Takes a function of no args, presumably with side effects, and returns an infinite (or length n if supplied) lazy sequence of calls to it.

repeat

repeat

function


Usage:

(repeat x)

(repeat n x)


Returns a lazy (infinite!, or length n if supplied) sequence of xs.

remove

remove

function


Usage:

(remove pred coll)


Returns a lazy sequence of the items in coll for which (pred item) returns false. pred must be free of side-effects.

reify

reify

macro


Usage:

(reify & opts+specs)


reify is a macro with the following structure:


(reify options * specs*)


Currently there are no options. Each spec consists of the protocol or interface name followed by zero or more method bodies:


protocol-or-interface-or-Object

(methodName [args+] body)*

ref-set

ref-set

function


Usage:

(ref-set ref val)


Must be called in a transaction. Sets the value of ref. Returns val.

ref

ref

function


Usage:

(ref x)

(ref x & options)


Creates and returns a Ref with an initial value of x and zero or more options (in any order):


:meta metadump-map

:validator validate-fn

:min-history (default 0)

:max-history (default 10)



reductions

reductions

function


Usage:

(reductions f coll)

(reductions f init coll)


Returns a lazy seq of the intermediate values of the reduction (as per reduce) of coll by f, starting with init.

reduce-kv

reduce-kv

function


Usage:

(reduce-kv f init coll)


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 keey 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

reduce

function


Usage:

(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.

re-seq

re-seq

function


Usage:

(re-seq re s)


Returns a lazy sequence of successive matches of pattern in string, using java.util.regex.Matcher.find(), each such match processed with re-groups.

re-pattern

re-pattern

function


Usage:

(re-pattern s)


Returns an instance of java.util.regex.Pattern, for use, e.g. in re-matcher.

re-matches

re-matches

function


Usage:

(re-matches re s)


Returns the match, if any, of string to pattern, using java.util.regex.Matcher.matches(). Uses re-groups to return the groups.

re-matcher

re-matcher

function


Usage:

(re-matcher re s)


Returns an instance of java.util.regex.Matcher, for use, e.g. in re-find.

re-groups

re-groups

function


Usage:

(re-groups m)


Returns the groups from the most recent match/find. If there are no nested groups, returns a string of the entire match. If there are nested groups, returns a vector of the groups, the first element being the entire match.

re-find

re-find

function


Usage:

(re-find m)

(re-find re s)


Returns the next regex match, if any, of string to pattern, using java.util.regex.Matcher.find(). Uses re-groups to return the groups.

range

range

function


Usage:

(range)

(range end)

(range start end)

(range start end step)


Returns a lazy seq of nums from start (inclusive) to end (exclusive), by step, where start defaults to 0, step to 1, and end to infinity.

rand-nth

rand-nth

function


Usage:

(rand-nth coll)


Return a random element of the (sequential) collection. Will have the same performance characteristics as nth for the given collection.

rand-int

rand-int

function


Usage:

(rand-int n)


Returns a random integer between 0 (inclusive) and n (exclusive).

rand

rand

function


Usage:

(rand)

(rand n)


Returns a random floating point number between 0 (inclusive) and n (default 1) (exclusive).

P

promise

promise

function


Usage:

(promise)


Alpha - subject to change.

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. See also - realized?

pop

pop

function


Usage:

(pop coll)


For a list or queue, returns a new list/queue without the first item, for a vector, returns a new vector without the last item. If the collection is empty, throws an exception. Note - not the same as next/butlast.

pmap

pmap

function


Usage:

(pmap f coll)

(pmap f coll & colls)


Like map, except f is applied in parallel. Semi-lazy in that the parallel computation stays ahead of the consumption, but doesn't realize the entire result unless required. Only useful for computationally intensive functions where the time of f dominates the coordination overhead.

persistent!

persistent!

function


Usage:

(persistent! coll)


Alpha - subject to change.

Returns a new, persistent version of the transient collection, in constant time. The transient collection cannot be used after this call, any such use will throw an exception.

peek

peek

function


Usage:

(peek coll)


For a list or queue, same as first, for a vector, same as, but much more efficient than, last. If the collection is empty, returns nil.

pcalls

pcalls

function


Usage:

(pcalls & fns)


Executes the no-arg fns in parallel, returning a lazy sequence of their values.

partition-by

partition-by

function


Usage:

(partition-by f coll)


Applies f to each value in coll, splitting it each time f returns a new value. Returns a lazy seq of partitions.

partition-all

partition-all

function


Usage:

(partition-all n coll)

(partition-all n step coll)


Returns a lazy sequence of lists like partition, but may include partitions with fewer than n items at the end.

partition

partition

function


Usage:

(partition n coll)

(partition n step coll)

(partition n step pad coll)


Returns a lazy sequence 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 pad 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.

partial

partial

function


Usage:

(partial f arg1)

(partial f arg1 arg2)

(partial f arg1 arg2 arg3)

(partial f arg1 arg2 arg3 & more)


Takes a function f and fewer than 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.

N

nth

nth

function


Usage:

(nth coll index)

(nth coll index not-found)


Returns the value at the index. get returns nil if index out of bounds, nth throws an exception unless not-fonud is supplied. nth also works for strings, Java arrays, regex Matchers and Lists, and, in O(n) time, for sequences.

next

next

function


Usage:

(next coll)


Returns a seq of the items after the first. Calls seq on its argument. If there are no more items, returns nil.

nfirst

nfirst

function


Usage:

(nfirst x)


Same as (next (first x))

nnext

nnext

function


Usage:

(nnext x)


Same as (next (next x))

not-any?

not-any?

function


Usage:

(not-any? pred coll)


Returns false if (pred x) if logical true for any x in coll, else true.

not-every?

not-every?

function


Usage:

(not-every? pred coll)


Returns false if (pred x) is logical true for every x in coll, else true.

M

merge-with

merge-with

function


Usage:

(merge-with f & maps)


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(s) from the latter (left-to-right) will be combined with the mapping in the result by calling (f val-in-result val-in-latter).

merge

merge

function


Usage:

(merge & maps)


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.

memoize

memoize

function


Usage:

(memoize f)


Returns a memoized version of a referentially transparent function. The memoized version of the function keeps a cache of the mapping from arguments to results and, when calls with the same arguments are repeated often, has higher performance at the expense of higher memory use.

mapv

mapv

function


Usage:

(mapv f coll)

(mapv f c1 c2)

(mapv f c1 c2 c3)

(mapv f c1 c2 c3 & colls)


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. Function f should accept number-of-colls arguments.

mapcat

mapcat

function


Usage:

(mapcat f & colls)


Returns the result of applying concat to the result of applying map to f and colls. Thus function f should return a collection.

map-indexed

map-indexed

function


Usage:

(map-indexed f coll)


Returns a lazy sequence consisting of the result of applying f to 0 and the first item of coll, followed by applying f to 1 and the second item in coll, etc, until coll is exhausted. Thus function f should accept 2 arguments, index and item.

map

map

function


Usage:

(map f coll)

(map f c1 c2)

(map f c1 c2 c3)

(map f c1 c2 c3 & colls)


Returns a lazy sequence consisting of the result of applying f to the set of first items in each coll, until any one of the colls is exhausted. Any remaining items in other colls are ignored. Function f should accept number-of-colls arguments.

L

loop

loop

macro


Usage:

(loop bindings & body)


Evaluates the exprs in a lexical context in which the symbols in the binding-forms are bound to their respective init-exprs or parts therein. Acts as a recur target.

list*

list*

fuction


Usage:

(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 sequence.

list

list

function


Usage:

(list & items)


Creates a new list containing the items

line-seq

line-seq

function


Usage:

(line-seq rdr)


Returns the lines of text from rdr as a lazy sequence of strings. rdr must implement java.io.BufferedReader

letfn

letfn

macro


Usage:

(letfn fnspecs & body)


fnspec ==> (fname [params*] exprs) or (fname ([params*] exprs)+)


Takes a vector of function specs and a body, and generates a set of bindings of functions to their names. All of the names are available in all of the definitions of the functions, as well as the body.

let

let

macro


Usage:

(let bindings & body)


bindings => binding-form init-expr


Evaluates the exprs in a lexical context in which the symbols in the binding-forms are bound to their respective init-exprs or parts therein.

lazy-seq

lazy-seq

macro


Usage: (lazy-seq & body)


Takes a body of expressions that returns an ISeq or nil, and yields a Seqable object that will invoke the body only the first time seq is called, and will cache the result and return it on all subsequent seq calls. See also - realized?

lazy-cat

lazy-cat

macro


Usage:

(lazy-cat & colls)


Expands to code which yields a lazy sequence of the concatenation of the supplied colls. Each coll expr is not evaluated until it is needed.


(lazy-cat xs ys zs) === (concat (lazy-seq xs) (lazy-seq ys) (lazy-seq zs))

last

last

function


Usage:

(last coll)


Return the last item in coll, in linear time

K

keys

keys

function


Usage:

(keys map)


Reurns a sequence of the map's keys.

key

key

function


Usage:

(key e)


Returns the key of the map entry.

keep-indexed

keep-indexed

function


Usage:

(keep-indexed f coll)


Returns a lazy sequence of the non-nil results of (f index item). Note, this means false return values will be included. f must be free of side-effects.

keep

keep

function


Usage: (keep f coll)


Returns a lazy 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.

J

juxt

juxt

funtionn


Usage:

(juxt f)

(juxt f g)

(juxt f g h)

(juxt f g h & fs)


Takes a set of functions and returns a fn that is the juxtaposition of those fns. The returned fn takes a variable number of args, and returns a vector containing the result of applying each fn to the args (left-to-right).


((juxt a b c) x) => [(a x) (b x) (c x)]

I

iterate-seq

iterator-seq

function


Usage:

(iterator-seq iter)


Returns a seq on a java.util.Iterator. note that most collections provided iterators implement Iterable and thus support seq directly.

iterate

iterate

function


Usage:

(iterate f x)


Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects

into

into

function


Usage:

(into to from)


Returns a new coll consisting of to-coll with all of the items of from-coll conjoined.

interpose

interpose

function


Usage:

(interpose sep col)


Returns a lazy seq of the elements of coll seperated by sep

import

import

macro


Usage:

(import & import-symbols-or-lists)


import-list => (package-symbol class-name-symbols*)


For each name in class-name-symbols, adds a mapping from name to the class named by package.name to the current namespace. Use :import in the ns macro in preference to calling this directly.

if-not

if-not

macro


Usage:

(if-not test then)

(if-not test then else)


Evaluates test. If logical false, evaluates and returns then expr, otherwise else expr, if supplied, else nil.

if-let

if-let

macro


Usage:

(if-let bindings then)

(if-let bindings then else & oldform)


bindings => binding-form test


If test is true, evaluates then with binding-form bound to the value of the test, if not yields else

H

hash-map

hash-map

function


Usage:

(hash-map)

(hash-map & keyvals)


keyval => key val


Returns a new hash map with supplied mappings.

G

group-by

group-by

function


Usage:

(group-by f coll)


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.

get-method

get-method

function


Usage:

(get-method multifn dispatch-val)


Given a multimethod and a dispatch value, returns the dispatch fn that would apply to that value, or nil if none apply and no default

get-in

get-in

function


Usage:

(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-fonud value if supplied.

get

get

function


Usage:

(get map key)

(get map keye not-found)


Returns the value mapped to key, not-found or nil if key not present.

F

future-cancelled?

future-cancelled?

function


Usage:

(future-cancelled? f)


Returns true if future f is cancelled

future-done?

future-done?

function


Usage:

(future-done? f)


Returns true if future f is done

future-cancel

future-cancel

function


Usage:

(future-cancel f)


Cancels the future, if possible.

future-call

future-call

function


Usage: (future-call f)


Takes a function of no args 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. See also - realized?.

future

future

macro


Usage:

(future & body)


Takes a body of expressions and yields a future object that will invoke the body 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. See also - realized?.

frequencies

frequencies

function


Usage:

(frequencies coll)


Returns a map from distinct items in coll to the number of times they appear.

format

format

function


Usage:

(format fmt & args)


Formats a string using java.lang.String.format, see java.util.Formatter for format string syntax

force

force

function


Usage:

(force x)


If x is a Delay, returns the (possibly cached) value of its expression, else returns x

for

for

macro


Usage:

(for 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 lazy sequence of evaluations of expr. Collections are iterated in a nested fashion, rightmost fastest, and nested coll-exprs can refer to bindings created in prior binding-forms. Supported modifiers are: :let [binding-form expr ...], :while test, :when test.


(take 100 (for [x (range 1000000000) y (range 10000000) :while (< y x)] [x y]))

fnil

fnil

function


Usage:

(fnil f x)

(fnil f x y)

(fnil f x y z)


Takes a function f, and returns a function that calls f, replacing a nil first argument to f with the supplied value x. Higher arity versions can replace arguments in the second and third positions (y, z). Note that the function f can take any number of argumetns, not just the one(s) being nil-patched.

flatten

flatten

function


Usage:

(flatten x)


Takes any nested comination of sequential things (lists, vectors, etc.) and returns their contents as a single, flat, sequence.

(flatten nil) returns an empty sequence.

first

first

function


Usage:

(first coll)


Returns the first item in the collection. Calls seq on its argument. If coll is nil, returns nil.

find

find

function


Usage:

(find map key)


Returns the map entry for key, or nil if key not present

filterv

filterv

function


Usage:

(filterv pred coll)


Returns a vector of the items in coll for which (pred item) returns true. pred must be free fo side-effects.

filter

filter

function


Usage:

(filter pred coll)


Returns a lazy sequence of the items in coll for which (pred item) returns true. pred must be free of side-effects.

ffirst

ffirst

function


Usage:

(ffirst x)


Same as (first (first x))

E

every?

every?

function


Usage:

(every? pred coll)


Returns true if (pred x) is logical true for every x in coll, else false.

every-pred

every-pred

function


Usage:

(every-pred p)

(every-pred p1 p2)

(every-pred p1 p2 p3)

(every-pred p1 p2 p3 & ps)


Takes a set of predicates and returns a function f that returns true if all of its composing predicates returns a logical true value against all of its arguments, else it returns false. Note that f is short-circuiting in that it will stop execution on the first argument that triggers a logical false result against the original predicates.

ensure

ensure

function


Usage:

(ensure ref)


Must be called in a transaction. Protects the ref from modification by other transactions. Returns the in-transaction-value of ref. Allows for more concurrency than (ref-set ref @ref)

empty?

empty?

function


Usage:

(empty? coll)


Returns true if coll has no items - same as (not (seq coll)). Please use the idiom (seq x) rather than (not (empty? x))

empty

empty

function


Usage:

(empty coll)


Returns an empty collection of the same category as coll, or nil

D

drop-while

drop-while

function


Usage: (drop-while pred coll)


Returns a lazy sequence of the items in coll starting from the first item for which (pred item) returns logical false.

drop-last

drop-last

function


Usage:

(drop-last s)

(drop-last n s)


Return a lazy sequence of all but the last n (default 1) items in coll

drop

drop

function


Usage:

(drop n coll)


Returns a lazy sequence of all but the first n items in coll.

doto

doto

macro


Usage:

(doto x & forms)


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 (new java.util.HashMap) (.put "a" 1) (.put "b" 2))

dotimes

dotimes

macro


Usage: (dotimes bindings & body)


bindings => name n


Repeatedly executes body (presumably for side-effects) with name bound to integers from 0 through n-1.

doseq

doseq

macro


Usage:

(doseq seq-exprs & body)


Repeatedly executes body (presumably for side-effects) with bindings and filtering as provided by "for". Does not retain the head of the sequence. Returns nil.

dorun

dorun

function


Usage:

(dorun coll)

(dorun n coll)


When lazy sequences are produced via functions that have side effects, any effects other than those needed to produce the first element in the seq do not occur until the seq is consumed. dorun can be used to force any effects. Walks through the successive nexts of the seq, does NOT retain the head and returns nil.

doall

doall

function


Usage:

(doall coll)

(doall n coll)


When lazy sequences are produced via functions that have side effects, any effects other than those needed to produce the first element in the seq do not occur until the seq is consumed. doall can be used to force any effects. Walks through the successive nexts of the seq, retains the head and returns it, thus causing the entire seq to reside in memory at one time.

distinct?

distinct?

function


Usage:

(distinct? x)

(distinct? x y)

(distinct? x y & more)


Returns true if no two of the argumenst are =

distinct

distinct

function


Usage:

(distinct coll)


Returns a lazy sequence of the elements of coll with duplicates removed.

dissoc

dissoc

function


Usage:

(dissoc map)

(dissoc map key)

(dissoc map key & ks)


dissoc[iate]. Returns a new map of the same (hashed/sorted) type, that does not contain a mapping for key(s).

disj

disj

function


Usage:

(disj set)

(disj set key)

(disj set key & ks)


disj[oin]. Returns a new set of the same (hashed/sorted) type, that does not contain key(s).

derive

derive

function


Usage:

(derive tag parent)

(derive h tag parent)


Establishes a parent/child relationship between parent and tag. Parent must be a namespace-qualified symbol or keyword and child can be either a namespace-qualified symbol or keyword or a class. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to, and modifies, the global hierarchy.

deref

deref

function


Usage:

(deref ref)

(deref ref timeout-ms timeout-val)


Also reader macro: @ref/@agent/@var/@atom/@delay/@future/@promise. Within a transaction returns the in-transaction-value of ref, else returns the most-recently-committed value of ref. When applied to a var, agent, or atom, returns its current state. When applied to a delay, forces it if not already forced. When applied to a future, will block if computation not complete. When applied to a promise, will bolck until a value is delivered. The variant taking a timeout can be used for blocking references (futures and promises), and will return timeout-val if the timeout (in milliseconds) is reached before a value is available. See also - realized?.

delay?

delay?

function


Usage: (delay? x)


returns true if x is a Delay created with delay

delay

delay

macro


Usage:

(delay & body)


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. See also - realized?

defmulti

defmulti

macro


Usage:

(defmulti name docstring? attr-map? dispatch-fn & options)


Creates a new multimethod with the associated dispatch function. The docstring and attributes-map are optional.


Options are key-value pairs and may be one of:


:default the default dispatch value, defaults to :default

:hierarchy the isa? hierarchy to use for dispatching defaults to the global hierarchy

(defmulti process-input

(fn [game input]

(:kind (last (:uis game)))))


(defmethod process-input :start [game input]

(reset-game game))


(defmethod process-input :win [game input]

(if (= input :escape)

(assoc game :uis [])

(assoc game :uis [(->UI :start)])))


defmacro

defmacro

macro


Usage:

(defmacro name doc-string? attr-map? [params*] body)

(defmacro name doc-string? attr-map? ([params*] body) + attr-map?)


Like defn, but the resulting function name is declared as a macro ad ill be used as a macro by the compiler when it is called.

C

cycle

cycle

function


Usage:

(cycle coll)


Returns a lazy (infinite!) sequence of repititions of the items in coll.

count

count

function


Usage:

(count coll)


Returns the number of items in the collection. (count nil) returns 0. Also works on strings, arrays, and Java Collections and Maps.

contains?

contains?

function


Usage:

(contains? coll key)


Returns true if key is present in the given collection, otherwise returns false. Note that for numerically indexed collections like vectors and Java arrays, this tests if the numeric key is within the range of indexes. 'contains?' operates constant or logarithmic time; it will not perform a linear search for a value. See also 'some'.

constantly

constantly

function


Usage:

(constantly x)


Returns a function that takes any number of arguments and returns x.

cons

cons

function


Usage:

(cons x seq)


returns a new seq where x is the first element and seq is the rest.

conj

conj

function


Usage:

(conj coll x)

(conj coll x & xs)


conj[oin]. Returns a new collection with xs 'added'. (conj nil item) returns (item). The 'addition' may happen at different 'places' depending on the concrete type.

condp

condp

macro


Usage:

(condp pred expr & clauses)


Takes a binary predicate, an expression, and a set of clauses.

Each clause can take the form of either:


test-expr result-expr

test-expr :>> result-fn


Note :>> is an ordinary keyword.


For each clause, (pred test-expr expr) is evaluated. If it returns logical true, the clause is a match. If a binary clause matches, the result-expr is returned, if a ternary clause matches, its result-fn, which must be a unary function, is called with the result of the predicate as its argument, the result of that call being the return value of condp. A single default expression can follow the clauses, and its value will be returned if no clause matches. If no default expression in provided and no clause matches, an IllegalArgumentException is thrown.

cond

cond

macro


Usage:

(cond & clauses)


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.

concat

concat

function


Usage:

(concat)

(concat x)

(concat x y)

(concat x y & zs)


Returns a lazy seq representing the concatenation of the elements in the supplied colls

compile

compile

function


Usage

(compile lib)


Compiles the namespace named by the symbol lib into a set of classfiles. The source for the lib must be in a proper classpath-relative directory. The output files will go into the directory specified by *compile-path*, and that directory too must be in the classpath.

case

case

macro


Usage:

(case e & clauses)


Takes an expression, and a set of clauses.


Each clause can tae the form of either:


test-constant result-expr

(test-constant1 ... test-constantN) result-expr


The test-constants are not evaluated. They must be compile-time literals, and need not be quoted. If the expression is equal to a test-constant, the corresponding result-expr is returned. A single default expression can follow the clausses, and its value will be returned if no clause matches. If no default expression is provided and no clause matches, an IllegalArgumentException is thrown.


Unlike cond and condp, case does a constant-time dispatch, the clauses are not considered sequantially. All manner of constant expressions are acceptable in case, including numbers, stringss, symbols, keywords, and (Clojure) composites thereof. Note that since lists are used to group multiple constants that map to the same expression, a vector can be used to match a list if needed. The test-constants need not be all of the same type.

example

(case input

:enter (assoc game :uis [(->UI :win)])

:backspace (assoc game :uis [(->UI :lose)])

\q (assoc game :uis [])

game))

comp

comp

function


Usage:

(comp)

(comp f)

(comp f g)

(comp f g h)

(comp f1 f2 f3 & fs)


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.

B

butlast

butlast

function


Usage:

(butlast coll)


Return a seq of all but the last item in coll, in linear time

bound-fn

bound-fn

macro


Usage:

(bound-fn & fntail)


Returns a function defined by the given fntail, which will install the same bindings in effect as in the thread at the time bound-fn was called. This may be used to define a helper function which runs on a different thread, but needs the same bindings in place.

binding

binding

macro


Usage:

(binding bindings & body)


binding => var-symbol init-expr


Creates new bindings for the (already-existing) vars, with the supplied initial values, executes the exprs in an implicit do, then re-establishes the bindings that existed before. The new bindings are made in parallel (unlike let); all init-exprs are evaluated before the vars are bound to their new values.


(Like a let but bindings are done in parallel?)

bases

bases

function


Usage:

(bases c)


Returns the immediate superclass and direct interfaces of c, if any

A

atom

atom

function


Usage:

(atom x)

(atom x & options)


Creates and returns an Atom with an initial value of x and zero or more options (in any order):


:meta metadata-map

:validator validate-fn


If metadata-map is supplied, it will become the metadata on the atom. validate-fn must be nil or a side-effect-free- fn of one argument, which will be passed the intended new state on any state change. If the new state change is unacceptable, the validate-fn should return false or throw an exception.

associative?

associative?

function


Usage:

(associative? coll)


Returns true if coll implements Associative

assoc-in

assoc-in

function


Usage:

(assoc-in m [k & ks] v)


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 will be created.

assoc

assoc

function


Usage:

(assoc map key val)

(assoc may key val & kvs)


assoc[iate]. When applied to a map, returns a new map of the same (hashed/sorted) 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).

array-map

array-map

function


Usage:

(array-map)

(array-map & keyvals)


Constructs an array-map

areduce

areduce

macro


Usage:

(areduce a idx ret init exp)


Reduces an expression across an array a, using an index named idx, and return value named ret, initialized to init, setting ret to the evaluation of expr at each step, returning ret.

apply

apply

function


Usage:

(apply f args)

(apply f x args)

(apply f x y args)

(apply f x y z args)

(apply f a b c d & args)


Applies fn f to the argument list formed by prepending intervening arguments to args.

amap

amap

macro


Usage:

(amap a idx ret expr)


Maps an expression across an array a, using an index named idx, and return value named ret, initialized to a clone of a, then setting each element of ret to the evaluation of expr, returning the new array ret.

alter

alter

function


Usage:

(alter ref fun & args)


Must be called in a transaction. Sets the in-transaction-value of ref to:


(apply fun in-transaction-value-of-ref args)


and return the in-transaction-value of ref.

alength

alength

function


Usage: (alength array)


Returns the length of the Java array. Works on arrays of all types.

aget

aget

function


Usage:

(aget array idx)

(aget array idx & idx)


Returns the value at the index/indices. Works on Java arrays of all types.

agent

agent

function


Usage:

(agent state & options)


Creates and returns an agent with an initial value of state and zero or more options (in any order):


:meta metadata-map

:validator validate-fn

:error-handler handler-fn

:error-mode mode-keyword


If metadata-map is supplied, it will become the metadata on the agent. validate-fn must be nil or a side-effect-free fn of one argument, which will be passed the intended new state on any state change. If the new state is unacceptable, the validate-fn should return false or throw an exception. handler-fn rejects a new state -- see set-error-hanler! for details. The mode-keyword may be either :continue (the default if an error-handler is given) or :fail (the default if no error-handler is given) -- see set-error-mode! for details.

add-watch

add-watch

function


Usage:

(add-watch reference key fn)


Alpha - subject to change.

Adds a watch function to an agent/atom/var/ref reference. The watch fn must be a fn of args: a key, the reference, its old-state, its new-state. Whenever the reference's state might have been changed, any registered watches will have their functions called. The watch fn will be called synchronously, on the agent's htread if an agent, before any pending sends if agent or ref. Note that an atom's or ref's state may have changed again prior to the fn call, so use old/new-state rather than derefing the reference. Note also that watch fns may be called from multiple threads simultaneously. Var watchers are triggered only by root binding changes, not thread-local set!s. Keys must be unique per reference, and can be used to remove the watch with remove-watch, but are otherwise considered opaque by the watch mechanism.

accessor

accessor

function


Usage:

(accessor s key)


Returns a fn that, given an instance of a structmap with the basis, returns the value at the key. The key must be in the basis. The returned function should be (slightly) more efficient than using get, but such use of accessors should be limited to known performance-critical areas.

==

==

function


Usage:

(== x)

(== x y)

(== x y & more)


Returns non-nil if nums all have the equivalent value (type-independent), otherwise false

..

..

macro


Usage:

(.. x form)

(.. x form & more)


form => fieldName-symbol or instanceMethodName-symbol args*)


Expands into a member access (.) of the first member on the first argument, followed by the next member on the result, etc. For instance:


(.. System (getProperties) (get "os.name))


expands to:


(. (. System (getProperties)) (get "os.name"))


but is easier to write, read, and understand.

->>

->>

macro


Usage;

(->> x form)

(->> x form & more)


Threads the expr 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 the second form, etc.

->

->

macro


Usage:

(-> x)

(-> x form)

(-> x form & more)


Threads the expr through the forms. Inserts x as the second item in the fisrt 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.