This is the core library of ClojureScript, providing core operations for managing state, creating/manipulating/querying data structures, interop with JS, many predicates, etc.
cljs.core/
qualification.function/macro
are flexible and can be used as macros
or functions when appropriate. details hereA string indicating the current ClojureScript target (e.g. "default"
for browsers,
"nodejs"
for Node)
A sequence of the supplied command line arguments, or nil if none were supplied
When compiled for a command-line target, whatever function
*main-cli-fn*
is set to will be called with the command-line
argv as arguments.
(*)
(* x)
(* x y)
(* x y & more)
Returns the product of nums. (*) returns 1.
(+)
(+ x)
(+ x y)
(+ x y & more)
Returns the sum of nums. (+) returns 0.
(- x)
(- x y)
(- x y & more)
If no ys are supplied, returns the negation of x, else subtracts the ys from x and returns the result.
(/ x)
(/ x y)
(/ x y & more)
If no denominators are supplied, returns 1/numerator, else returns numerator divided by all of the denominators.
(min-key k x)
(min-key k x y)
(min-key k x y & more)
Returns the x for which (k x), a number, is least. If there are multiple such xs, the last one is returned.
(max-key k x)
(max-key k x y)
(max-key k x y & more)
Returns the x for which (k x), a number, is greatest. If there are multiple such xs, the last one is returned.
(and)
(and x)
(and x & next)
Evaluates exprs one at a time, from left to right. If a form returns logical false (nil or false), and returns that value and doesn't evaluate any of the other expressions, otherwise it returns the value of the last expr. (and) returns true.
(or)
(or x)
(or x & next)
Evaluates exprs one at a time, from left to right. If a form returns a logical true value, or returns that value and doesn't evaluate any of the other expressions, otherwise it returns the value of the last expression. (or) returns nil.
(= x)
(= x y)
(= x y & more)
Equality. Returns true if x equals y, false if not. Compares numbers and collections in a type-independent manner. Clojure's immutable data structures define -equiv (and thus =) as a value, not an identity, comparison.
(== x)
(== x y)
(== x y & more)
Returns non-nil if nums all have the equivalent value, otherwise false. Behavior on non nums is undefined.
ArrayNodeSeq
Atom
BlackNode
ChunkedCons
ChunkedSeq
Cons
EmptyList
IndexedSeq
IntegerRange
KeySeq
Keyword
LazySeq
List
MapEntry
Namespace
NeverEquiv
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
Symbol
TaggedLiteral
UUID
ValSeq
Var
default
js/Date
number
Protocol for adding value comparison functionality to a type.
(< x)
(< x y)
(< x y & more)
Returns non-nil if nums are in monotonically increasing order, otherwise false.
(> x)
(> x y)
(> x y & more)
Returns non-nil if nums are in monotonically decreasing order, otherwise false.
(<= x)
(<= x y)
(<= x y & more)
Returns non-nil if nums are in monotonically non-decreasing order, otherwise false.
(>= x)
(>= x y)
(>= x y & more)
Returns non-nil if nums are in monotonically non-increasing order, otherwise false.
(compare x y)
Comparator. Returns a negative number, zero, or a positive number when x is logically 'less than', 'equal to', or 'greater than' y. Uses IComparable if available and google.array.defaultCompare for objects of the same type and special-cases nil to be less than any other object.
(comparator pred)
Returns an JavaScript compatible comparator based upon pred.
Protocol for values that can be compared.
(nat-int? x)
Return true if x satisfies int? and is a natural integer value.
(integer? n)
Returns true if n is a JavaScript number with no decimal part.
(int? x)
Return true if x satisfies integer? or is an instance of goog.math.Integer or goog.math.Long.
(odd? n)
Returns true if n is odd, throws an exception if n is not an integer
(even? n)
Returns true if n is even, throws an exception if n is not an integer
(false? x)
Returns true if x is the value false, false otherwise.
(undefined? x)
Returns true if x identical to the JavaScript undefined value.
(str)
(str x)
(str x & ys)
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.
(subs s start)
(subs s start end)
Returns the substring of s beginning at start inclusive, and ending at end (defaults to length of string), exclusive.
(re-find re s)
Returns the first regex match, if any, of s to re, using re.exec(s). Returns a vector, containing first the matching substring, then any capturing groups if the regular expression contains capturing groups.
(re-matches re s)
Returns the result of (re-find re s) if re fully matches s.
(re-pattern s)
Returns an instance of RegExp which has compiled the provided string.
(re-seq re s)
Returns a lazy sequence of successive matches of re in s.
(parse-boolean s)
Parse strings "true" or "false" and return a boolean, or nil if invalid. Note that this explicitly excludes strings with different cases, or space characters.
(parse-double s)
Parse string with floating point components and return a floating point value, or nil if parse fails. Grammar: https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#valueOf-java.lang.String-
(parse-long s)
Parse string of decimal digits with optional leading -/+ and return an integer value, or nil if parse fails
(parse-uuid s)
Parse a string representing a UUID and return a UUID instance, or nil if parse fails. Grammar: https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html#toString--
(bit-and-not x y)
(bit-and-not x y & more)
Bitwise and with complement
(bit-shift-right-zero-fill x n)
DEPRECATED: Bitwise shift right with zero fill
(unsigned-bit-shift-right x n)
Bitwise shift right with zero fill
(require & args)
Loads libs, skipping any that are already loaded. Each argument is either a libspec that identifies a lib or a flag that modifies how all the identified libs are loaded. Use :require in the ns macro in preference to calling this directly. Libs A 'lib' is a named set of resources in classpath whose contents define a library of ClojureScript code. Lib names are symbols and each lib is associated with a ClojureScript namespace. A lib's name also locates its root directory within classpath using Java's package name to classpath-relative path mapping. All resources in a lib should be contained in the directory structure under its root directory. All definitions a lib makes should be in its associated namespace. 'require loads a lib by loading its root resource. The root resource path is derived from the lib name in the following manner: Consider a lib named by the symbol 'x.y.z; it has the root directory/x/y/, and its root resource is /x/y/z.clj. The root resource should contain code to create the lib's namespace (usually by using the ns macro) and load any additional lib resources. Libspecs A libspec is a lib name or a vector containing a lib name followed by options expressed as sequential keywords and arguments. Recognized options: :as takes a symbol as its argument and makes that symbol an alias to the lib's namespace in the current namespace. :refer takes a list of symbols to refer from the namespace. :refer-macros takes a list of macro symbols to refer from the namespace. :include-macros true causes macros from the namespace to be required. :rename specifies a map from referred var names to different symbols (and can be used to prevent clashes) Flags A flag is a keyword. Recognized flags: :reload, :reload-all, :verbose :reload forces loading of all the identified libs even if they are already loaded :reload-all implies :reload and also forces loading of all libs that the identified libs directly or indirectly load via require or use :verbose triggers printing information about each load, alias, and refer Example: The following would load the library clojure.string :as string. (require '[clojure.string :as string])
(import & import-symbols-or-lists)
import-list => (closure-namespace constructor-name-symbols*) For each name in constructor-name-symbols, adds a mapping from name to the constructor named by closure-namespace to the current namespace. Use :import in the ns macro in preference to calling this directly.
(use & args)
Like require, but referring vars specified by the mandatory :only option. Example: The following would load the library clojure.set while referring the intersection var. (use '[clojure.set :only [intersection]])
(refer-clojure & args)
Refers to all the public vars of `cljs.core`, subject to filters. Filters can include at most one each of: :exclude list-of-symbols :rename map-of-fromsymbol-tosymbol Filters can be used to select a subset, via exclusion, or to provide a mapping to a symbol different from the var's name, in order to prevent clashes.
(load & paths)
Loads Clojure code from resources in classpath. A path is interpreted as classpath-relative if it begins with a slash or relative to the root directory for the current namespace otherwise.
(load-file name)
Sequentially read and evaluate the set of forms contained in the file.
A set of strings indicating the namespaces currently loaded in the REPL.
(try expr* catch-clause* finally-clause?)
catch-clause => (catch classname name expr*) finally-clause => (finally expr*) Catches and handles JavaScript exceptions.
(catch classname name expr*)
catch-clause => (catch classname name expr*) finally-clause => (finally expr*) Catches and handles JavaScript exceptions.
(finally expr*)
catch-clause => (catch classname name expr*) finally-clause => (finally expr*) Catches and handles JavaScript exceptions.
(ex-info msg data)
(ex-info msg data cause)
Create an instance of ExceptionInfo, an Error type that carries a map of additional data.
(ex-message ex)
Returns the message attached to the given Error / ExceptionInfo object. For non-Errors returns nil.
(ex-data ex)
Returns exception data (a map) if ex is an ExceptionInfo. Otherwise returns nil.
(ex-cause ex)
Returns exception cause (an Error / ExceptionInfo) if ex is an ExceptionInfo. Otherwise returns nil.
(assert x)
- throw exception if x
is false
(assert x message)
- include message if assertion fails
Returns nil
.
Internally used to remove all calls to assert
when the compiler
option :elide-asserts
is set to true. Not to be used
manually.
(transient coll)
Returns a new, transient version of the collection, in constant time.
(persistent! tcoll)
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.
(conj!)
(conj! tcoll)
(conj! tcoll val)
(conj! tcoll val & vals)
Adds val to the transient collection, and return tcoll. The 'addition' may happen at different 'places' depending on the concrete type.
(pop! tcoll)
Removes the last item from a transient vector. If the collection is empty, throws an exception. Returns tcoll
(assoc! tcoll key val)
(assoc! tcoll key val & kvs)
When applied to a transient map, adds mapping of key(s) to val(s). When applied to a transient vector, sets the val at index. Note - index must be <= (count vector). Returns coll.
(dissoc! tcoll key)
(dissoc! tcoll key & ks)
Returns a transient map that doesn't contain a mapping for key(s).
(disj! tcoll val)
(disj! tcoll val & vals)
disj[oin]. Returns a transient set of the same (hashed/sorted) type, that does not contain key(s).
(volatile! val)
Creates and returns a Volatile with an initial value of val.
(vswap! vol f & args)
Non-atomically swaps the value of the volatile as if: (apply f current-value-of-vol args). Returns the value that was swapped in.
(vreset! vol newval)
Sets the value of volatile to newval without regard for the current value. Returns newval.
(atom x)
- creates atom with initial value of x
(atom x opts)
- adds metadata or validator to atom
(swap! a f)
(swap! a f x)
(swap! a f x y)
(swap! a f x y & more)
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.
(reset! a new-value)
Sets the value of atom to newval without regard for the current value. Returns new-value.
(compare-and-set! a oldval newval)
Atomically sets the value of atom to newval if and only if the current value of the atom is equal to oldval. Returns true if set happened, else false.
(swap-vals! a f)
(swap-vals! a f x)
(swap-vals! a f x y)
(swap-vals! a f x y & more)
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 [old new], the value of the atom before and after the swap.
(reset-vals! a new-value)
Sets the value of atom to newval. Returns [old new], the value of the atom before and after the reset.
(set-validator! iref val)
Sets the validator-fn for an atom. validator-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 validator-fn should return false or throw an Error. If the current state is not acceptable to the new validator, an Error will be thrown and the validator will not be changed.
(get-validator iref)
Gets the validator-fn for a var/ref/agent/atom.
(add-watch iref key f)
Adds a watch function to an atom reference. The watch fn must be a fn of 4 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. Note that an atom's state may have changed again prior to the fn call, so use old/new-state rather than derefing the reference. 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. Bear in mind that regardless of the result or action of the watch fns the atom's value will change. Example: (def a (atom 0)) (add-watch a :inc (fn [k r o n] (assert (== 0 n)))) (swap! a inc) ;; Assertion Error (deref a) ;=> 1
(remove-watch iref key)
Removes a watch (set by add-watch) from a reference
Atom
Protocol for types that can be watched. Currently only implemented by Atom.
(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.
(force x)
If x is a Delay, returns the (possibly cached) value of its expression, else returns x
(deref o)
Also reader macro: @var/@atom/@delay. Returns the most-recently-committed value of ref. When applied to a var or atom, returns its current state. When applied to a delay, forces it if not already forced. See also - realized?.
Protocol for adding dereference functionality to a reference.
(realized? x)
Returns true if a value has been produced for a delay or lazy sequence.
Protocol for types which can have a deferred realization. Currently only implemented by Delay and LazySeq.
(meta o)
Returns the metadata of obj, returns nil if there is no metadata.
(with-meta o meta)
Returns an object of the same type and value as obj, with map m as its metadata.
(vary-meta obj f)
(vary-meta obj f a)
(vary-meta obj f a b)
(vary-meta obj f a b c)
(vary-meta obj f a b c d)
(vary-meta obj f a b c d & args)
Returns an object of the same type and value as obj, with (apply f (meta obj) args) as its metadata.
(alter-meta! data f & args)
Alter the metadata of data
to be (apply f its-current-meta args)
.
(def symbol doc-string? init?)
Creates and interns a global var with the name of symbol in the current namespace (*ns*) or locates such a var if it already exists. 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.
(defonce x init)
defs name to have the root value of init iff the named var has no root value, else init is unevaluated
Use instead of def
when you want to configure its value at
compile-time with the :closure-defines
compiler option.
Must be a string, number, or boolean.
(declare & names)
defs the supplied var names with no bindings, useful for making forward declarations.
(var symbol)
The symbol must resolve to a var, and the Var object itself (not its value) is returned. The reader macro #'x expands to (var x).
(exists? x)
Return true if argument exists, analogous to usage of typeof operator in JavaScript.
(resolve quoted-sym)
Returns the var to which a symbol will be resolved in the namespace else nil.
(set! var-symbol expr)
(set! (.- instance-expr instanceFieldName-symbol) expr)
Used to set vars and JavaScript object fields
(test v)
test [v] finds fn at key :test in var metadata and calls it, presuming failure will throw exception
(ns name docstring? attr-map? references*)
You must currently use the ns form only with the following caveats * You must use the :only form of :use * :require supports :as, :refer, and :rename - all options can be skipped - in this case a symbol can be used as a libspec directly - that is, (:require lib.foo) and (:require [lib.foo]) are both supported and mean the same thing - :rename specifies a map from referred var names to different symbols (and can be used to prevent clashes) - prefix lists are not supported * The only options for :refer-clojure are :exclude and :rename * :import is available for importing Google Closure classes - ClojureScript types and records should be brought in with :use or :require :refer, not :import ed * Macros must be defined in a different compilation stage than the one from where they are consumed. One way to achieve this is to define them in one namespace and use them from another. They are referenced via the :require-macros / :use-macros options to ns - :require-macros and :use-macros support the same forms that :require and :use do Implicit macro loading: If a namespace is required or used, and that namespace itself requires or uses macros from its own namespace, then the macros will be implicitly required or used using the same specifications. Furthermore, in this case, macro vars may be included in a :refer or :only spec. This oftentimes leads to simplified library usage, such that the consuming namespace need not be concerned about explicitly distinguishing between whether certain vars are functions or macros. For example: (ns testme.core (:require [cljs.test :as test :refer [test-var deftest]])) will result in test/is resolving properly, along with the test-var function and the deftest macro being available unqualified. Inline macro specification: As a convenience, :require can be given either :include-macros true or :refer-macros [syms...]. Both desugar into forms which explicitly load the matching Clojure file containing macros. (This works independently of whether the namespace being required internally requires or uses its own macros.) For example: (ns testme.core (:require [foo.core :as foo :refer [foo-fn] :include-macros true] [woz.core :as woz :refer [woz-fn] :refer-macros [app jx]])) is sugar for (ns testme.core (:require [foo.core :as foo :refer [foo-fn]] [woz.core :as woz :refer [woz-fn]]) (:require-macros [foo.core :as foo] [woz.core :as woz :refer [app jx]])) Auto-aliasing clojure namespaces: If a non-existing clojure.* namespace is required or used and a matching cljs.* namespace exists, the cljs.* namespace will be loaded and an alias will be automatically established from the clojure.* namespace to the cljs.* namespace. For example: (ns testme.core (:require [clojure.test])) will be automatically converted to (ns testme.core (:require [cljs.test :as clojure.test]))
Var bound to a Namespace
object representing the current namespace.
Only used for bootstrapping.
(find-ns ns)
Returns the namespace named by the symbol or nil if it doesn't exist. Bootstrap only.
(find-macros-ns ns)
Returns the macros namespace named by the symbol or nil if it doesn't exist. Bootstrap only.
(in-ns name)
Sets *cljs-ns* to the namespace named by the symbol, creating it if needed.
(create-ns sym)
(create-ns sym ns-obj)
Create a new namespace named by the symbol. Bootstrap only.
(ns-imports quoted-ns)
Returns a map of the import mappings for the namespace.
(ns-interns quoted-ns)
Returns a map of the intern mappings for the namespace.
(ns-interns* sym)
Returns a map of the intern mappings for the namespace. Bootstrap only.
(ns-name ns-obj)
Returns the name of the namespace, a Namespace object. Bootstrap only.
(ns-publics quoted-ns)
Returns a map of the public intern mappings for the namespace.
(ns-unmap quoted-ns quoted-sym)
Removes the mappings for the symbol from the namespace.
(eval form)
Evaluates the form data structure (not text!) and returns the result. Delegates to cljs.core/*eval*. Intended for use in self-hosted ClojureScript, which sets up an implementation of cljs.core/*eval* for that environment.
Runtime environments may provide a way to evaluate ClojureScript forms. Whatever function *eval* is bound to will be passed any forms which should be evaluated.
(let bindings & body)
binding => binding-form init-expr binding-form => name, or destructuring-form destructuring-form => map-destructure-form, or seq-destructure-form 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. See https://clojure.org/reference/special_forms#binding-forms for more information about destructuring.
(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.
(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.
(with-redefs bindings & body)
binding => var-symbol temp-value-expr Temporarily redefines vars while executing the body. The temp-value-exprs will be evaluated and each resulting value will replace in parallel the root value of its var. After the body is executed, the root values of all the vars will be set back to their old values. Useful for mocking out functions during testing. Note that under advanced compilation vars are statically resolved, preventing with-redef usage. If var redefinition is desired in a production setting then the var to be redefined must be declared ^:dynamic.
(if test then else?)
Evaluates test. If not the singular values nil or false, evaluates and yields then, otherwise, evaluates and yields else. If else is not supplied it defaults to nil.
(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-some bindings then)
(if-some bindings then else & oldform)
bindings => binding-form test If test is not nil, evaluates then with binding-form bound to the value of test, if not, yields else
(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 test, if not, yields else
(when test & body)
Evaluates test. If logical true, evaluates body in an implicit do.
(when-not test & body)
Evaluates test. If logical false, evaluates body in an implicit do.
(when-some bindings & body)
bindings => binding-form test When test is not nil, evaluates body with binding-form bound to the value of test
(when-first bindings & body)
bindings => x xs Roughly the same as (when (seq xs) (let [x (first xs)] body)) but xs is evaluated only once
(when-let bindings & body)
bindings => binding-form test When test is true, evaluates body with binding-form bound to the value of test
(case e & clauses)
Takes an expression, and a set of clauses. Each clause can take 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 clauses, and its value will be returned if no clause matches. If no default expression is provided and no clause matches, an Error is thrown. Unlike cond and condp, case does a constant-time dispatch, the clauses are not considered sequentially. All manner of constant expressions are acceptable in case, including numbers, strings, symbols, keywords, and (ClojureScript) 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.
(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.
(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 is provided and no clause matches, an Error is thrown.
(cond-> expr & clauses)
Takes an expression and a set of test/form pairs. Threads expr (via ->) through each form for which the corresponding test expression is true. Note that, unlike cond branching, cond-> threading does not short circuit after the first true test expression.
(cond->> expr & clauses)
Takes an expression and a set of test/form pairs. Threads expr (via ->>) through each form for which the corresponding test expression is true. Note that, unlike cond branching, cond->> threading does not short circuit after the first true test expression.
When expr
is not nil, threads it into the first form (via ->
), and when that
result is not nil, through the next, etc.
When expr
is not nil, threads it into the first form (via ->>
), and when
that result is not nil, through the next, etc.
(-> x & forms)
Threads the expr 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.
(->> x & forms)
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 second form, etc.
(as-> expr name & forms)
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.
(do exprs*)
Evaluates the expressions in order and returns the value of the last. If no expressions are supplied, returns nil.
(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 100000000) y (range 1000000) :while (< y x)] [x y]))
(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.
(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.
(recur exprs*)
Evaluates the exprs in order, then, in parallel, rebinds the bindings of the recursion point to the values of the exprs. Execution then jumps back to the recursion point, a loop or fn method.
(trampoline f)
(trampoline f & args)
trampoline can be used to convert algorithms requiring mutual recursion without stack consumption. Calls f with supplied args, if any. If f returns a fn, calls that fn with no arguments, and continues to repeat, until the return value is not a fn, then returns that non-fn value. Note that if you want to return a fn as a final value, you must wrap it in some data structure and unpack it after trampoline returns.
(while test & body)
Repeatedly executes body while test expression is true. Presumes some side-effect will cause test to become false/nil. Returns nil
(dotimes bindings & body)
bindings => name n Repeatedly executes body (presumably for side-effects) with name bound to integers from 0 through n-1.
(lazy-seq & body)
Takes a body of expressions that returns an ISeq or nil, and yields a ISeqable 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.
(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))
(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.
(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.
(run! proc coll)
Runs the supplied procedure (via reduce), for purposes of side effects, on successive items in the collection. Returns nil
Same as (def name (core/fn [params* ] exprs*)) or (def name (core/fn ([params* ] exprs*)+)) with any doc-string or attrs added to the var metadata. prepost-map defines a map with optional keys :pre and :post that contain collections of pre or post conditions.
(fn & sigs)
params => positional-params* , or positional-params* & next-param positional-param => binding-form next-param => binding-form name => symbol Defines a function
(fn? f)
Return true if f is a JavaScript function or satisfies the Fn protocol.
(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.
(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 and will be used as a macro by the compiler when it is called.
(macroexpand quoted)
Repeatedly calls macroexpand-1 on form until it no longer represents a macro form, then returns it. Note neither macroexpand-1 nor macroexpand expand macros in subforms.
(macroexpand-1 quoted)
If form represents a macro form, returns its expansion, else returns form.
(gensym)
(gensym prefix-string)
Returns a new symbol with a unique name. If a prefix string is supplied, the name is prefix# where # is some unique number. If prefix is not supplied, the prefix is 'G__'.
(defmulti name docstring? attr-map? dispatch-fn & options)
Creates a new multimethod with the associated dispatch function. The docstring and attribute-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
(defmethod multifn dispatch-val & fn-tail)
Creates and installs a new method of multimethod associated with dispatch-value.
(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
(methods multifn)
Given a multimethod, returns a map of dispatch values -> dispatch fns
(prefer-method multifn dispatch-val-x dispatch-val-y)
Causes the multimethod to prefer matches of dispatch-val-x over dispatch-val-y when there is a conflict
(prefers multifn)
Given a multimethod, returns a map of preferred value -> set of other values
(remove-method multifn dispatch-val)
Removes the method of multimethod associated with dispatch-value.
(remove-all-methods multifn)
Removes all of the methods of multimethod.
(default-dispatch-val multifn)
Given a multimethod, return its default-dispatch-val.
(dispatch-fn multifn)
Given a multimethod, return its dispatch-fn.
(make-hierarchy)
Creates a hierarchy object for use with derive, isa? etc.
(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.
(underive tag parent)
(underive h tag parent)
Removes a parent/child relationship between parent and tag. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to, and modifies, the global hierarchy.
(parents tag)
(parents h tag)
Returns the immediate parents of tag, either via a JavaScript type inheritance relationship or a relationship established via derive. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to the global hierarchy
(ancestors tag)
(ancestors h tag)
Returns the immediate and indirect parents of tag, either via a JavaScript type inheritance relationship or a relationship established via derive. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to the global hierarchy
(descendants tag)
(descendants h tag)
Returns the immediate and indirect children of tag, through a relationship established via derive. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to the global hierarchy. Note: does not work on JavaScript type inheritance relationships.
(isa? child parent)
(isa? h child parent)
Returns true if (= child parent), or child is directly or indirectly derived from parent, either via a JavaScript type inheritance relationship or a relationship established via derive. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to the global hierarchy
(defprotocol psym & doc+methods)
A protocol is a named set of named methods and their signatures: (defprotocol AProtocolName ;optional doc string "A doc string for AProtocol abstraction" ;method signatures (bar [this a b] "bar docs") (baz [this a] [this a b] [this a b c] "baz docs")) No implementations are provided. Docs can be specified for the protocol overall and for each method. The above yields a set of polymorphic functions and a protocol object. All are namespace-qualified by the ns enclosing the definition The resulting functions dispatch on the type of their first argument, which is required and corresponds to the implicit target object ('this' in JavaScript parlance). defprotocol is dynamic, has no special compile-time effect, and defines no new types. (defprotocol P (foo [this]) (bar-me [this] [this y])) (deftype Foo [a b c] P (foo [this] a) (bar-me [this] b) (bar-me [this y] (+ c y))) (bar-me (Foo. 1 2 3) 42) => 45 (foo (let [x 42] (reify P (foo [this] 17) (bar-me [this] x) (bar-me [this y] x)))) => 17
(extend-protocol p & specs)
Useful when you want to provide several implementations of the same protocol all at once. Takes a single protocol and the implementation of that protocol for one or more types. Expands into calls to extend-type: (extend-protocol Protocol AType (foo [x] ...) (bar [x y] ...) BType (foo [x] ...) (bar [x y] ...) AClass (foo [x] ...) (bar [x y] ...) nil (foo [x] ...) (bar [x y] ...)) expands into: (do (clojure.core/extend-type AType Protocol (foo [x] ...) (bar [x y] ...)) (clojure.core/extend-type BType Protocol (foo [x] ...) (bar [x y] ...)) (clojure.core/extend-type AClass Protocol (foo [x] ...) (bar [x y] ...)) (clojure.core/extend-type nil Protocol (foo [x] ...) (bar [x y] ...)))
(deftype t fields & impls)
(deftype name [fields*] options* specs*) Currently there are no options. Each spec consists of a protocol or interface name followed by zero or more method bodies: protocol-or-Object (methodName [args*] body)* The type will have the (by default, immutable) fields named by fields, which can have type hints. Protocols and methods are optional. The only methods that can be supplied are those declared in the protocols/interfaces. Note that method bodies are not closures, the local environment includes only the named fields, and those fields can be accessed directly. Fields can be qualified with the metadata :mutable true at which point (set! afield aval) will be supported in method bodies. Note well that mutable fields are extremely difficult to use correctly, and are present only to facilitate the building of higherlevel constructs, such as ClojureScript's reference types, in ClojureScript itself. They are for experts only - if the semantics and implications of :mutable are not immediately apparent to you, you should not be using them. Method definitions take the form: (methodname [args*] body) The argument and return types can be hinted on the arg and methodname symbols. If not supplied, they will be inferred, so type hints should be reserved for disambiguation. Methods should be supplied for all methods of the desired protocol(s). You can also define overrides for methods of Object. Note that a parameter must be supplied to correspond to the target object ('this' in JavaScript parlance). Note also that recur calls to the method head should *not* pass the target object, it will be supplied automatically and can not be substituted. In the method bodies, the (unqualified) name can be used to name the class (for calls to new, instance? etc). One constructor will be defined, taking the designated fields. Note that the field names __meta and __extmap are currently reserved and should not be used when defining your own types. Given (deftype TypeName ...), a factory function called ->TypeName will be defined, taking positional parameters for the fields
(extend-type type-sym & impls)
Extend a type to a series of protocols. Useful when you are supplying the definitions explicitly inline. Propagates the type as a type hint on the first argument of all fns. type-sym may be * default, meaning the definitions will apply for any value, unless an extend-type exists for one of the more specific cases below. * nil, meaning the definitions will apply for the nil value. * any of object, boolean, number, string, array, or function, indicating the definitions will apply for values of the associated base JavaScript types. Note that, for example, string should be used instead of js/String. * a JavaScript type not covered by the previous list, such as js/RegExp. * a type defined by deftype or defrecord. (extend-type MyType ICounted (-count [c] ...) Foo (bar [x y] ...) (baz ([x] ...) ([x y] ...) ...)
(instance? c x)
Evaluates x and tests if it is an instance of the type c. Returns true or false
(defrecord rsym fields & impls)
(defrecord name [fields*] options* specs*) Currently there are no options. Each spec consists of a protocol or interface name followed by zero or more method bodies: protocol-or-Object (methodName [args*] body)* The record will have the (immutable) fields named by fields, which can have type hints. Protocols and methods are optional. The only methods that can be supplied are those declared in the protocols. Note that method bodies are not closures, the local environment includes only the named fields, and those fields can be accessed directly. Method definitions take the form: (methodname [args*] body) The argument and return types can be hinted on the arg and methodname symbols. If not supplied, they will be inferred, so type hints should be reserved for disambiguation. Methods should be supplied for all methods of the desired protocol(s). You can also define overrides for methods of Object. Note that a parameter must be supplied to correspond to the target object ('this' in JavaScript parlance). Note also that recur calls to the method head should *not* pass the target object, it will be supplied automatically and can not be substituted. In the method bodies, the (unqualified) name can be used to name the class (for calls to new, instance? etc). The type will have implementations of several ClojureScript protocol generated automatically: IMeta/IWithMeta (metadata support) and IMap, etc. In addition, defrecord will define type-and-value-based =, and will define ClojureScript IHash and IEquiv. Two constructors will be defined, one taking the designated fields followed by a metadata map (nil for none) and an extension field map (nil for none), and one taking only the fields (using nil for meta and extension fields). Note that the field names __meta and __extmap are currently reserved and should not be used when defining your own records. Given (defrecord TypeName ...), two factory functions will be defined: ->TypeName, taking positional parameters for the fields, and map->TypeName, taking a map of keywords to field values.
(reify & impls)
reify creates an object implementing a protocol. reify is a macro with the following structure: (reify options* specs*) Currently there are no options. Each spec consists of the protocol name followed by zero or more method bodies: protocol (methodName [args+] body)* Methods should be supplied for all methods of the desired protocol(s). You can also define overrides for Object methods. Note that the first parameter must be supplied to correspond to the target object ('this' in JavaScript parlance). Note also that recur calls to the method head should *not* pass the target object, it will be supplied automatically and can not be substituted. recur works to method heads The method bodies of reify are lexical closures, and can refer to the surrounding local scope: (str (let [f "foo"] (reify Object (toString [this] f)))) == "foo" (seq (let [f "foo"] (reify ISeqable (-seq [this] (seq f))))) == ("f" "o" "o")) reify always implements IMeta and IWithMeta and transfers meta data of the form to the created object. (meta ^{:k :v} (reify Object (toString [this] "foo"))) == {:k :v}
(specify expr & impls)
Identical to specify! but does not mutate its first argument. The first argument must be an ICloneable instance.
(specify! expr & impls)
Identical to reify but mutates its first argument.
(tagged-literal tag form)
Construct a data representation of a tagged literal from a tag symbol and a form.
(tagged-literal? value)
Return true if the value is the data representation of a tagged literal
(system-time)
Returns highest resolution time offered by host in milliseconds.
(time expr)
Evaluates expr and prints the time it took. Returns the value of expr.
(simple-benchmark bindings expr iterations & {:keys [print-fn], :or {print-fn (quote println)}})
Runs expr iterations times in the context of a let expression with the given bindings, then prints out the bindings and the expr followed by number of iterations and total time. The optional argument print-fn, defaulting to println, sets function used to print the result. expr's string representation will be produced using pr-str in any case.
(inst-ms inst)
Return the number of milliseconds since January 1, 1970, 00:00:00 GMT
(contains? coll v)
Returns true if key is present in the given collection, otherwise returns false. Note that for numerically indexed collections like vectors and 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'.
(distinct? x)
(distinct? x y)
(distinct? x y & more)
Returns true if no two of the arguments are =
(empty? coll)
Returns true if coll has no items. To check the emptiness of a seq, please use the idiom (seq x) rather than (not (empty? x))
(every? pred coll)
Returns true if (pred x) is logical true for every x in coll, else false.
(not-every? pred coll)
Returns false if (pred x) is logical true for every x in coll, else true.
(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)
(not-any? pred coll)
Returns false if (pred x) is logical true for any x in coll, else true.
Determines if the given collection implements IAssociative
(e.g. maps and vectors).
ArrayNodeSeq
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
Eduction
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
NodeSeq
PersistentArrayMapSeq
PersistentQueue
PersistentQueueSeq
PersistentTreeMapSeq
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
ValSeq
Marker interface indicating a persistent collection of sequential items
BlackNode
MapEntry
ObjMap
PersistentArrayMap
PersistentHashMap
PersistentTreeMap
PersistentVector
RedNode
Subvec
Protocol for adding associativity to collections.
PersistentTreeMap
PersistentTreeSet
Protocol for a collection which can represent their items in a sorted manner.
ArrayChunk
BlackNode
ChunkBuffer
EmptyList
IndexedSeq
IntegerRange
IntegerRangeChunk
List
MapEntry
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
RedNode
Subvec
TransientArrayMap
TransientHashMap
TransientHashSet
TransientVector
nil
Protocol for adding the ability to count a collection in constant time.
BlackNode
IndexedSeq
MapEntry
PersistentTreeMap
PersistentTreeSet
PersistentVector
RedNode
Subvec
Protocol for reversing a seq.
ArrayNodeSeq
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
ES6IteratorSeq
Eduction
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
ValSeq
Protocol for adding the ability to a type to be transformed into a sequence.
ArrayChunk
BlackNode
IndexedSeq
IntegerRange
IntegerRangeChunk
MapEntry
PersistentVector
RedNode
Subvec
TransientVector
Protocol for collections to provide indexed-based access to their items.
ArrayNode
BitmapIndexedNode
Eduction
HashCollisionNode
IndexedSeq
IntegerRange
PersistentArrayMap
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentVector
Range
Subvec
Protocol for iterating over a collection.
ArrayNodeSeq
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
ValSeq
Protocol for adding to a collection.
ArrayNodeSeq
ChunkedCons
ChunkedSeq
Cons
Cycle
ES6IteratorSeq
EmptyList
IndexedSeq
IntegerRange
IntegerRangeChunk
Iterate
KeySeq
LazySeq
List
NodeSeq
PersistentArrayMapSeq
PersistentQueue
PersistentQueueSeq
PersistentTreeMapSeq
RSeq
Range
Repeat
ValSeq
Protocol for collections to provide access to their items as sequences.
Protocol for adding vector functionality to collections.
Marker interface indicating a persistent list
Protocol for adding mapping functionality to collections.
PersistentHashSet
PersistentTreeSet
Protocol for adding set functionality to a collection.
(seq coll)
Returns a seq on the collection. If the collection is empty, returns nil. (seq nil) returns nil. seq also works on Strings.
(cons x coll)
Returns a new seq where x is the first element and coll is the rest.
Creates a seq
from a JavaScript array or array-like object, starting at index i
if given.
(tree-seq branch? children root)
Returns a lazy sequence of the nodes in a tree, via a depth-first walk. branch? must be a fn of one arg that returns true if passed a node that can have children (but may not). children must be a fn of one arg that returns a sequence of the children. Will only be called on nodes for which branch? returns true. Root is the root node of the tree.
(vec coll)
Creates a new vector containing the contents of coll. JavaScript arrays will be aliased and should not be modified.
(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.
(hash-map & keyvals)
keyval => key val Returns a new hash map with supplied mappings.
(array-map & keyvals)
keyval => key val Returns a new array map with supplied mappings.
(sorted-map & keyvals)
keyval => key val Returns a new sorted map with supplied mappings.
(sorted-map-by comparator & keyvals)
keyval => key val Returns a new sorted map with supplied mappings, using the supplied comparator.
(hash-set)
(hash-set & keys)
Returns a new hash set with supplied keys. Any equal keys are handled as if by repeated uses of conj.
(sorted-set-by comparator & keys)
Returns a new sorted set with supplied keys, using the supplied comparator.
(obj-map & keyvals)
keyval => key val Returns a new object map with supplied mappings.
(count coll)
Returns the number of items in the collection. (count nil) returns 0. Also works on strings, arrays, and Maps
(bounded-count n coll)
If coll is counted? returns its count, else will count at most the first n elements of coll using its seq
(first coll)
Returns the first item in the collection. Calls seq on its argument. If coll is nil, returns nil.
(next coll)
Returns a seq of the items after the first. Calls seq on its argument. If there are no more items, returns nil
(rest coll)
Returns a possibly empty seq of the items after the first. Calls seq on its argument.
(butlast s)
Return a seq of all but the last item in coll, in linear time
(nth coll n)
(nth coll n not-found)
Returns the value at the index. get returns nil if index out of bounds, nth throws an exception unless not-found is supplied. nth also works for strings, arrays, regex Matchers and Lists, and, in O(n) time, for sequences.
(nthnext coll n)
Returns the nth next of coll, (seq coll) when n is 0.
(take n)
(take n coll)
Returns a lazy sequence of the first n items in coll, or all items if there are fewer than n. Returns a stateful transducer when no collection is provided.
(take-nth n)
(take-nth n coll)
Returns a lazy seq of every nth item in coll. Returns a stateful transducer when no collection is provided.
(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-while pred)
(take-while pred coll)
Returns a lazy sequence of successive items from coll while (pred item) returns logical true. pred must be free of side-effects. Returns a transducer when no collection is provided.
(drop n)
(drop n coll)
Returns a laziness-preserving sequence of all but the first n items in coll. Returns a stateful transducer when no collection is provided.
(drop-last s)
(drop-last n s)
Return a lazy sequence of all but the last n (default 1) items in coll
(drop-while pred)
(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. Returns a stateful transducer when no collection is provided.
(filter pred)
(filter pred coll)
Returns a lazy sequence of the items in coll for which (pred item) returns logical true. pred must be free of side-effects. Returns a transducer when no collection is provided.
(filterv pred coll)
Returns a vector of the items in coll for which (pred item) returns logical true. pred must be free of side-effects.
(remove pred)
(remove pred coll)
Returns a lazy sequence of the items in coll for which (pred item) returns logical false. pred must be free of side-effects. Returns a transducer when no collection is provided.
(keep f)
(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. Returns a transducer when no collection is provided.
(keep-indexed f)
(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. Returns a stateful transducer when no collection is provided.
(map f)
(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 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. Returns a transducer when no collection is provided.
(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.
(map-indexed f)
(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. Returns a stateful transducer when no collection is provided.
(mapcat f)
(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. Returns a transducer when no collections are provided
(replace smap)
(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. Returns a transducer when no collection is provided.
(concat)
(concat x)
(concat x y)
(concat x y & zs)
Returns a lazy seq representing the concatenation of the elements in the supplied colls.
(flatten x)
Takes any nested combination of sequential things (lists, vectors, etc.) and returns their contents as a single, flat sequence. (flatten nil) returns nil.
(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.
(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).
(interleave)
(interleave c1)
(interleave c1 c2)
(interleave c1 c2 & colls)
Returns a lazy seq of the first item in each coll, then the second etc.
(interpose sep)
(interpose sep coll)
Returns a lazy seq of the elements of coll separated by sep. Returns a stateful transducer when no collection is provided.
(dedupe)
(dedupe coll)
Returns a lazy sequence removing consecutive duplicates in coll. Returns a transducer when no collection is provided.
(distinct)
(distinct coll)
Returns a lazy sequence of the elements of coll with duplicates removed. Returns a stateful transducer when no collection is provided.
(frequencies coll)
Returns a map from distinct items in coll to the number of times they appear.
(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 up to n items. In case there are not enough padding elements, return a partition with less than n items.
(partition-all n)
(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. Returns a stateful transducer when no collection is provided.
(partition-by f)
(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. Returns a stateful transducer when no collection is provided.
(partitionv n coll)
(partitionv n step coll)
(partitionv n step pad coll)
Returns a lazy sequence of vectors 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.
(partitionv-all n)
(partitionv-all n coll)
(partitionv-all n step coll)
Returns a lazy sequence of vector partitions, but may include partitions with fewer than n items at the end. Returns a stateful transducer when no collection is provided.
(split-with pred coll)
Returns a vector of [(take-while pred coll) (drop-while pred coll)]
(splitv-at n coll)
Returns a vector of [(into [] (take n) coll) (drop n coll)]
(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.
(sort coll)
(sort comp coll)
Returns a sorted sequence of the items in coll. Comp can be boolean-valued comparison function, or a -/0/+ valued comparator. Comp defaults to compare.
(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). Comp can be boolean-valued comparison function, or a -/0/+ valued comparator. Comp defaults to compare.
(conj)
(conj coll)
(conj coll x)
(conj coll x & xs)
conj[oin]. Returns a new collection with the xs 'added'. (conj nil item) returns (item). (conj coll) returns coll. (conj) returns []. The 'addition' may happen at different 'places' depending on the concrete type.
(into)
(into to)
(into to from)
(into to xform from)
Returns a new coll consisting of to-coll with all of the items of from-coll conjoined. A transducer may be supplied.
(assoc coll k v)
(assoc coll k v & 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).
(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.
(update m k f)
(update m k f x)
(update m k f x y)
(update m k f x y z)
(update m k f x y z & more)
'Updates' a value in an associative structure, where k is a key and f is a function that will take the old value and any supplied args and return the new value, and returns a new structure. If the key does not exist, nil is passed as the old value.
(update-in m [k & ks] f)
(update-in m [k & ks] f a)
(update-in m [k & ks] f a b)
(update-in m [k & ks] f a b c)
(update-in m [k & ks] f a b c & args)
'Updates' a value in a nested associative structure, where ks is a sequence of keys and f is a function that will take the old value and any supplied args and return the new value, and returns a new nested structure. If any levels do not exist, hash-maps will be created.
(update-keys m f)
m f => {(f k) v ...} Given a map m and a function f of 1-argument, returns a new map whose keys are the result of applying f to the keys of m, mapped to the corresponding values of m. f must return a unique key for each key of m, else the behavior is undefined.
(update-vals m f)
m f => {k (f v) ...} Given a map m and a function f of 1-argument, returns a new map where the keys of m are mapped to result of applying f to the corresponding values of m.
(get o k)
(get o k not-found)
Returns the value mapped to key, not-found or nil if key not present in associative collection, set, string, array, or ILookup instance.
(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.
(select-keys map keyseq)
Returns a map containing only those entries in map whose key is in keys
(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.
(disj coll)
(disj coll k)
(disj coll k & ks)
disj[oin]. Returns a new set of the same (hashed/sorted) type, that does not contain key(s).
(dissoc coll)
(dissoc coll k)
(dissoc coll k & ks)
dissoc[iate]. Returns a new map of the same (hashed/sorted) type, that does not contain a mapping for key(s).
(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. Note - not the same as next/butlast.
(empty coll)
Returns an empty collection of the same category as coll, or nil
(keys map)
Returns a sequence of the map's keys, in the same order as (seq map).
(vals map)
Returns a sequence of the map's values, in the same order as (seq map).
(zipmap keys vals)
Returns a map with the keys mapped to the corresponding vals.
(rseq rev)
Returns, in constant time, a seq of the items in rev (which can be a vector or sorted-map), in reverse order. If rev is empty returns nil
(reverse coll)
Returns a seq of the items in coll in reverse order. Not lazy.
(subseq sc test key)
(subseq sc start-test start-key end-test end-key)
sc must be a sorted collection, test(s) one of <, <=, > or >=. Returns a seq of those entries with keys ek for which (test (.. sc comparator (compare ek key)) 0) is true
(rsubseq sc test key)
(rsubseq sc start-test start-key end-test end-key)
sc must be a sorted collection, test(s) one of <, <=, > or >=. Returns a reverse seq of those entries with keys ek for which (test (.. sc comparator (compare ek key)) 0) is true
(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 structure with the original and no trimming is done.
(cycle coll)
Returns a lazy (infinite!) sequence of repetitions of the items in coll.
(repeat x)
(repeat n x)
Returns a lazy (infinite!, or length n if supplied) sequence of xs.
(replicate n x)
DEPRECATED: Use 'repeat' instead. Returns a lazy seq of n xs.
(iterate f x)
Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects
(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.
(partial f)
(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 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.
(constantly x)
Returns a function that takes any number of arguments and returns x.
(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
(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.
(complement f)
Takes a fn f and returns a fn that takes the same arguments as f, has the same effects, if any, and returns the opposite truth value.
(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 against any of its arguments, 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.
(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 return 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.
(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 arguments, not just the one(s) being nil-patched.
(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)]
(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.
(transduce xform f coll)
(transduce xform f init coll)
reduce with a transformation of f (xf). If init is not supplied, (f) will be called to produce it. f should be a reducing step function that accepts both 1 and 2 arguments, if it accepts only 2 you can add the arity-1 with 'completing'. Returns the result of applying (the transformed) xf to init and the first item in coll, then applying xf to that result and the 2nd item, etc. If coll contains no items, returns init and f is not called. Note that certain transforms may inject or skip items.
(eduction xform* coll)
Returns a reducible/iterable application of the transducers to the items in coll. Transducers are applied in order as if combined with comp. Note that these applications will be performed every time reduce/iterator is called.
(into)
(into to)
(into to from)
(into to xform from)
Returns a new coll consisting of to-coll with all of the items of from-coll conjoined. A transducer may be supplied.
(sequence coll)
(sequence xform coll)
(sequence xform coll & colls)
Coerces coll to a (possibly empty) sequence, if it is not already one. Will not force a lazy seq. (sequence nil) yields (), When a transducer is supplied, returns a lazy sequence of applications of the transform to the items in coll(s), i.e. to the set of first items of each coll, followed by the set of second items in each coll, until any one of the colls is exhausted. Any remaining items in other colls are ignored. The transform should accept number-of-colls arguments
(cat rf)
A transducer which concatenates the contents of each input, which must be a collection, into the reduction.
(halt-when pred)
(halt-when pred retf)
Returns a transducer that ends transduction when pred returns true for an input. When retf is supplied it must be a fn of 2 arguments - it will be passed the (completed) result so far and the input that triggered the predicate, and its return value (if it does not throw an exception) will be the return value of the transducer. If retf is not supplied, the input that triggered the predicate will be returned. If the predicate never returns true the transduction is unaffected.
(completing f)
(completing f cf)
Takes a reducing function f of 2 args and returns a fn suitable for transduce by adding an arity-1 signature that calls cf (default - identity) on the result argument.
(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-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 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.
(reduced x)
Wraps x in a way such that a reduce will terminate with the value x
(ensure-reduced x)
If x is already reduced?, returns it, else returns (reduced x)
(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.
(clone value)
Clone the supplied value which must implement ICloneable.
(cloneable? value)
Return true if x implements ICloneable protocol.
Cons
EmptyList
IndexedSeq
IntegerRange
List
PersistentArrayMap
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentTreeMap
PersistentTreeSet
PersistentVector
RSeq
Range
Subvec
Protocol for cloning a value.
(js->clj x)
(js->clj x & opts)
Recursively transforms JavaScript arrays into ClojureScript vectors, and JavaScript objects into ClojureScript maps. With option ':keywordize-keys true' will convert object fields from strings to keywords.
(clj->js x & {:keys [keyword-fn], :or {keyword-fn name}, :as options})
Recursively transforms ClojureScript values to JavaScript. sets/vectors/lists become Arrays, Keywords and Symbol become Strings, Maps become Objects. Arbitrary keys are encoded to by `key->js`. Options is a key-value pair, where the only valid key is :keyword-fn, which should point to a single-argument function to be called on keyword keys. Default to `name`.
(js-iterable? x)
Return true if x has a JavaScript iterator property
(array 1 2 3 ...)
Creates a JavaScript array containing the given args.
(aget array idx)
(aget array idx & idxs)
Returns the value at the index/indices. Works on JavaScript arrays.
(aset array idx val)
(aset array idx idx2 & idxv)
Sets the value at the index/indices. Works on JavaScript arrays. Returns val.
(alength array)
Returns the length of the array. Works on arrays of all types.
(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.
(areduce a idx ret init expr)
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.
(aclone arr)
Returns a javascript array, cloned from the passed in array
(make-array size)
(make-array type size)
(make-array type size & more-sizes)
Construct a JavaScript array of the specified dimensions. Accepts ignored type argument for compatibility with Clojure. Note that there is no efficient way to allocate multi-dimensional arrays in JavaScript; as such, this function will run in polynomial time when called with 3 or more arguments.
(object-array size-or-seq)
(object-array size init-val-or-seq)
Creates an array of objects. Does not coerce array, provided for compatibility with Clojure.
(to-array-2d coll)
Returns a (potentially-ragged) 2-dimensional array containing the contents of coll.
(into-array aseq)
(into-array type aseq)
Returns an array with components set to the values in aseq. Optional type argument accepted for compatibility with Clojure.
(js-obj)
(js-obj & keyvals)
Create JavaSript object from an even number arguments representing interleaved keys and values.
(. .instanceMethod instance args*)
(. .-instanceField instance)
The instance member form works for methods and fields. They all expand into calls to the dot operator at macroexpansion time.
(.. 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.
(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 js/Map) (.set "a" 1) (.set "b" 2))
(memfn name & args)
Expands into code that creates a fn that expects to be passed an object and any args and calls the named instance method on the object passing the args. Use when you want to treat a JavaScript method as a first-class fn.
(new Constructor. args*)
(new Constructor args*)
The args, if any, are evaluated from left to right, and passed to the JavaScript constructor. The constructed object is returned.
(js-comment comment)
Emit a top-level JavaScript multi-line comment. New lines will create a new comment line. Comment block will be preceded and followed by a newline
(js-delete obj key)
Delete a property from a JavaScript object. Returns true upon success, false otherwise.
(js-inline-comment comment)
Emit an inline JavaScript comment.
(js-invoke obj s & args)
Invoke JavaScript object method via string. Needed when the string is not a valid unquoted property name.
(js-mod n d)
Modulus of num and div with original javascript behavior. i.e. bug for negative numbers
(this-as name & body)
Defines a scope where JavaScript's implicit "this" is bound to the name provided.
(rand)
(rand n)
Returns a random floating point number between 0 (inclusive) and n (default 1) (exclusive).
(rand-int n)
Returns a random integer between 0 (inclusive) and n (exclusive).
(rand-nth coll)
Return a random element of the (sequential) collection. Will have the same performance characteristics as nth for the given collection.
(random-sample prob)
(random-sample prob coll)
Returns items from coll with random probability of prob (0.0 - 1.0). Returns a transducer when no collection is provided.
(random-uuid)
Returns a pseudo-randomly generated UUID instance (i.e. type 4).
(keyword name)
(keyword ns name)
Returns a Keyword with the given namespace and name. Do not use : in the keyword strings, it will be added automatically.
(symbol name)
(symbol ns name)
Returns a Symbol with the given namespace and name. Arity-1 works on strings, keywords, and vars.
(namespace x)
Returns the namespace String of a symbol or keyword, or nil if not present.
(qualified-keyword? x)
Return true if x is a keyword with a namespace
(qualified-symbol? x)
Return true if x is a symbol with a namespace
(qualified-ident? x)
Return true if x is a symbol or keyword with a namespace
(simple-keyword? x)
Return true if x is a keyword without a namespace
(simple-symbol? x)
Return true if x is a symbol without a namespace
(simple-ident? x)
Return true if x is a symbol or keyword without a namespace
(keyword-identical? x y)
Efficient test to determine that two keywords are identical.
(symbol-identical? x y)
Efficient test to determine that two symbols are identical.
(pr & objs)
Prints the object(s) using string-print. Prints the object(s), separated by spaces if there is more than one. By default, pr and prn print in a way that objects can be read by the reader
Prints the object(s) using string-print. print and println produce output for human consumption.
(pr-str & objs)
pr to a string, returning it. Fundamental entrypoint to IPrintWithWriter.
(pr-str* obj)
Support so that collections can implement toString without loading all the printing machinery.
(pr-str-with-opts objs opts)
Prints a sequence of objects to a string, observing all the options given in opts
(prn-str-with-opts objs opts)
Same as pr-str-with-opts followed by (newline)
(with-out-str & body)
Evaluates exprs in a context in which *print-fn* is bound to .append on a fresh StringBuffer. Returns the string created by any nested printing calls.
Flushes the output stream that is the current value of *out*
.
(Currently unimplemented)
Not implemented. In clojure, it can be bound to true to preserve object types when printing, allowing successful object duplication when read back.
A var representing the function used to print error output, which may differ
between runtime environments. Use enable-console-print!
to
set it to print to console/stderr, then bind as follows:
(enable-console-print!)
(binding [*print-fn* *print-err-fn*]
(println "printed to stderr in Node, or to browser console as error"))
A var representing the function used to print output, which may differ
between runtime environments. Use enable-console-print!
to
set it to print to console/stdout.
(enable-console-print!)
(println "printed to stdout in Node, or to browser console")
*print-fns-bodies* controls whether functions print their source or only their names.
Limits the number of items in each collection to print. Defaults to nil
indicating
no limit. A ...
is printed for items not shown.
Descend only n
levels deep when printing a nested object. Defaults to nil
indicating no limit. A #
is printed for objects at level n
.
Determines if metadata should be included when printing an object. Defaults to false.
Determines if maps are printed as namespace maps when all keys have the same namespace. Defaults to false.
Set to false by enable-console-print!
to prevent
println
and prn
from duplicating the newline
already appended by JavaScript console.
Determines if strings are printed with quotes and escape characters. "Readably" means the printed string can be copy-pasted back into the reader to produce the same value.
Do not use directly. The following functions will set this flag appropriately:
true | false |
---|---|
pr |
print |
pr-str |
print-str |
prn |
println |
prn-str |
println-str |
Indicates whether flush
is called after a newline is printed.
Currently unused. Expected to refer to an IWriter
object
representing standard output for print operations, as it is in Clojure.
(add-tap f)
Adds f, a fn of one argument, to the tap set. This function will be called with anything sent via tap>. Remember f in order to remove-tap
(tap> x)
Sends x to any taps. Returns the result of *exec-tap-fn*, a Boolean value.
(*exec-tap-fn* f)
Arranges to have tap functions executed via the supplied f, a function of no arguments. Returns true if successful, false otherwise.
(hash o)
Returns the hash code of its argument. Note this is the hash code consistent with =.
(hash-ordered-coll coll)
Returns the hash code, consistent with =, for an external ordered collection implementing Iterable. See http://clojure.org/data_structures#hash for full algorithms.
(hash-unordered-coll coll)
Returns the hash code, consistent with =, for an external unordered collection implementing Iterable. For maps, the iterator should return map entries whose hash is computed as (hash-ordered-coll [k v]). See http://clojure.org/data_structures#hash for full algorithms.
(mix-collection-hash hash-basis count)
Mix final collection hash for ordered or unordered collections. hash-basis is the combined collection hash, count is the number of elements included in the basis. Note this is the hash code consistent with =, different from .hashCode. See http://clojure.org/data_structures#hash for full algorithms.
(unchecked-add)
(unchecked-add x)
(unchecked-add x y)
(unchecked-add x y & more)
Returns the sum of nums. (+) returns 0.
(unchecked-add-int)
(unchecked-add-int x)
(unchecked-add-int x y)
(unchecked-add-int x y & more)
Returns the sum of nums. (+) returns 0.
(unchecked-dec x)
Returns a number one less than x, an int.
(unchecked-dec-int x)
Returns a number one less than x, an int.
(unchecked-divide-int x)
(unchecked-divide-int x y)
(unchecked-divide-int x y & more)
If no denominators are supplied, returns 1/numerator, else returns numerator divided by all of the denominators.
(unchecked-get obj key)
INTERNAL. Compiles to JavaScript property access using bracket notation. Does not distinguish between object and array types and not subject to compiler static analysis.
(unchecked-long x)
Coerce to long by stripping decimal places. Identical to `int'.
(unchecked-multiply)
(unchecked-multiply x)
(unchecked-multiply x y)
(unchecked-multiply x y & more)
Returns the product of nums. (*) returns 1.
(unchecked-multiply-int)
(unchecked-multiply-int x)
(unchecked-multiply-int x y)
(unchecked-multiply-int x y & more)
Returns the product of nums. (*) returns 1.
(unchecked-set obj key val)
INTERNAL. Compiles to JavaScript property access using bracket notation. Does not distinguish between object and array types and not subject to compiler static analysis.
(unchecked-subtract x)
(unchecked-subtract x y)
(unchecked-subtract x y & more)
If no ys are supplied, returns the negation of x, else subtracts the ys from x and returns the result.
(unchecked-subtract-int x)
(unchecked-subtract-int x y)
(unchecked-subtract-int x y & more)
If no ys are supplied, returns the negation of x, else subtracts the ys from x and returns the result.
(es6-iterator coll)
Return a ES2015+ compatible iterator for coll.
(es6-iterator-seq iter)
Given an ES2015+ compatible iterator return a seq.
(long x)
Coerce to long by stripping decimal places. Identical to `int'.
(double-array size-or-seq)
(double-array size init-val-or-seq)
Creates an array of doubles. Does not coerce array, provided for compatibility with Clojure.
(long-array size-or-seq)
(long-array size init-val-or-seq)
Creates an array of longs. Does not coerce array, provided for compatibility with Clojure.
(int-array size-or-seq)
(int-array size init-val-or-seq)
Creates an array of ints. Does not coerce array, provided for compatibility with Clojure.
Manually set the JavaScript global context. Only "window", "self" , and "global" supported.
Used internally to allow if
to use JavaScript truthiness rather
than Clojure truthiness, for the performance benefit of saving a function call.
For interop purposes, this is used in conjunction with the compiler option
:infer-externs
to emit a warning whenever a symbol is in danger of being
renamed in advanced :optimizations
(i.e. compiler cannot infer an extern).
Defaults to false. When set to true, warnings are activated for the rest of the file thereafter.
(set! *warn-on-infer* true)
(defn wrap-baz [x] (.baz x))
;; WARNING: Cannot infer target type in expression (. x baz)
(defn wrap-baz [^js/Foo.Bar x] (.baz x))
;; no more warning after x is annotated
(Throwable->map o)
Constructs a data representation for an Error with keys: :cause - root cause message :phase - error phase :via - cause chain, with cause keys: :type - exception class symbol :message - exception message :data - ex-data :at - top stack element :trace - root cause stack elements
(chunked-seq vec i off)
(chunked-seq vec node i off)
(chunked-seq vec node i off meta)
(equiv-map x y)
Test map equivalence. Returns true if x equals y, otherwise returns false.
(iteration step & {:keys [somef vf kf initk], :or {vf identity, kf identity, somef some?, initk nil}})
Creates a seqable/reducible via repeated calls to step, a function of some (continuation token) 'k'. The first call to step will be passed initk, returning 'ret'. Iff (somef ret) is true, (vf ret) will be included in the iteration, else iteration will terminate and vf/kf will not be called. If (kf ret) is non-nil it will be passed to the next step call, else iteration will terminate. This can be used e.g. to consume APIs that return paginated or batched data. step - (possibly impure) fn of 'k' -> 'ret' :somef - fn of 'ret' -> logical true/false, default 'some?' :vf - fn of 'ret' -> 'v', a value produced by the iteration, default 'identity' :kf - fn of 'ret' -> 'next-k' or nil (signaling 'do not continue'), default 'identity' :initk - the first value passed to step, default 'nil' It is presumed that step with non-initk is unreproducible/non-idempotent. If step with initk is unreproducible it is on the consumer to not consume twice.
(pr-sequential-writer writer print-one begin sep end opts coll)
(seq-to-map-for-destructuring s)
Builds a map from a seq as described in https://clojure.org/reference/special_forms#keyword-arguments
(unsafe-cast t x)
EXPERIMENTAL: Subject to change. Unsafely cast a value to a different type.
Marker protocol indicating an array sequence.
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(ArrayNodeSeq. meta nodes i s __hash)
(Atom. state meta validator watches)
IAssociative
ICollection
IComparable
ICounted
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIndexed
ILookup
IMapEntry
IMeta
IPrintWithWriter
IReduce
IReversible
ISeqable
ISequential
IStack
IVector
IWithMeta
(BlackNode. key val left right __hash)
ASeq
IChunkedNext
IChunkedSeq
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
ISeq
ISeqable
ISequential
IWithMeta
(ChunkedCons. chunk more meta __hash)
ASeq
IChunkedNext
IChunkedSeq
ICollection
IDrop
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(ChunkedSeq. vec node i off meta __hash)
ASeq
ICloneable
ICollection
IEmptyableCollection
IEquiv
IHash
IList
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(Cons. meta first rest __hash)
ICollection
IEmptyableCollection
IMeta
INext
IPending
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(Cycle. meta all prev current _next)
(ES6IteratorSeq. value iter _rest)
(Eduction. xform coll)
ICloneable
ICollection
ICounted
IEmptyableCollection
IEquiv
IHash
IList
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IStack
IWithMeta
(EmptyList. meta)
ArrayChunk
IntegerRangeChunk
Protocol for accessing the items of a chunk.
Protocol for accessing the chunks of a collection.
Protocol for accessing a collection as sequential chunks.
ChunkedSeq
IndexedSeq
IntegerRange
PersistentArrayMap
PersistentArrayMapSeq
PersistentVector
Repeat
Protocol for persistent or algorithmically defined collections to provide a means of dropping N items that is more efficient than sequential walking.
Protocol for collections which can transformed to transients.
ArrayNodeSeq
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
ValSeq
Protocol for creating an empty collection.
BlackNode
MapEntry
ObjMap
PersistentArrayMap
PersistentHashMap
PersistentTreeMap
PersistentVector
RedNode
Subvec
Protocol for implementing entry finding in collections.
BlackNode
Keyword
MapEntry
MetaFn
MultiFn
ObjMap
PersistentArrayMap
PersistentHashMap
PersistentHashSet
PersistentTreeMap
PersistentTreeSet
PersistentVector
RedNode
Subvec
Symbol
TransientArrayMap
TransientHashMap
TransientHashSet
TransientVector
Var
Protocol for adding the ability to invoke an object as a function. For example, a vector can also be used to look up a value: ([1 2 3 4] 1) => 2
ArrayNodeSeq
Atom
BlackNode
ChunkedCons
ChunkedSeq
Cons
EmptyList
IndexedSeq
IntegerRange
KeySeq
Keyword
LazySeq
List
MapEntry
MultiFn
Namespace
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
Symbol
TaggedLiteral
UUID
ValSeq
Var
default
Protocol for adding hashing functionality to a type.
ObjMap
PersistentArrayMap
PersistentHashMap
PersistentTreeMap
PersistentVector
Subvec
Protocol for associative types that can reduce themselves via a function of key and val. Called by cljs.core/reduce-kv.
BlackNode
MapEntry
ObjMap
PersistentArrayMap
PersistentHashMap
PersistentHashSet
PersistentTreeMap
PersistentTreeSet
PersistentVector
RedNode
Subvec
TaggedLiteral
TransientArrayMap
TransientHashMap
TransientHashSet
TransientVector
Protocol for looking up a value in a data structure.
Protocol for examining a map entry.
ArrayNodeSeq
Atom
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
MetaFn
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
Symbol
ValSeq
Var
function
Protocol for accessing the metadata of an object.
ArrayNodeSeq
ChunkedCons
ChunkedSeq
Cons
Cycle
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
NodeSeq
PersistentArrayMapSeq
PersistentQueueSeq
PersistentTreeMapSeq
RSeq
Range
Repeat
ValSeq
Protocol for accessing the next items of a collection.
ArrayNodeSeq
Atom
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
Delay
ES6IteratorSeq
Eduction
EmptyList
ExceptionInfo
IndexedSeq
IntegerRange
Iterate
KeySeq
Keyword
LazySeq
List
MapEntry
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
Symbol
TaggedLiteral
TransformerIterator
UUID
ValSeq
Var
Volatile
The old IPrintable protocol's implementation consisted of building a giant list of strings to concatenate. This involved lots of concat calls, intermediate vectors, and lazy-seqs, and was very slow in some older JS engines. IPrintWithWriter implements printing via the IWriter protocol, so it be implemented efficiently in terms of e.g. a StringBuffer append.
ArrayChunk
ArrayNodeSeq
BlackNode
ChunkedSeq
Cons
Cycle
Eduction
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
NodeSeq
PersistentArrayMap
PersistentArrayMapSeq
PersistentTreeMapSeq
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
ValSeq
Protocol for seq types that can reduce themselves. Called by cljs.core/reduce.
Protocol for collections to provide access to their items as stacks. The top of the stack should be accessed in the most efficient way for the different data structures.
Protocol for adding associativity to transient collections.
Protocol for adding basic functionality to transient collections.
TransientArrayMap
TransientHashMap
Protocol for adding mapping functionality to transient collections.
TransientHashSet
Protocol for adding set functionality to a transient collection.
TransientVector
Protocol for adding vector functionality to transient collections.
ArrayNodeSeq
BlackNode
ChunkedCons
ChunkedSeq
Cons
Cycle
EmptyList
IndexedSeq
IntegerRange
Iterate
KeySeq
LazySeq
List
MapEntry
MetaFn
NodeSeq
ObjMap
PersistentArrayMap
PersistentArrayMapSeq
PersistentHashMap
PersistentHashSet
PersistentQueue
PersistentQueueSeq
PersistentTreeMap
PersistentTreeMapSeq
PersistentTreeSet
PersistentVector
RSeq
Range
RedNode
Repeat
Subvec
Symbol
ValSeq
Var
Protocol for adding metadata to an object.
StringBufferWriter
Protocol for writing. Currently only implemented by StringBufferWriter.
ASeq
ICloneable
ICollection
ICounted
IDrop
IEmptyableCollection
IEquiv
IHash
IIndexed
IIterable
IMeta
INext
IPrintWithWriter
IReduce
IReversible
ISeq
ISeqable
ISequential
IWithMeta
(IndexedSeq. arr i meta)
IChunkedNext
IChunkedSeq
ICloneable
ICollection
ICounted
IDrop
IEmptyableCollection
IEquiv
IHash
IIndexed
IIterable
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(IntegerRange. meta start end step cnt __hash)
(IntegerRangeChunk. start step count)
ICollection
IEmptyableCollection
IMeta
INext
IPending
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(Iterate. meta f prev-seed seed next)
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(KeySeq. mseq _meta)
(Keyword. ns name fqn _hash)
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPending
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(LazySeq. meta fn s __hash)
ASeq
ICloneable
ICollection
ICounted
IEmptyableCollection
IEquiv
IHash
IList
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IStack
IWithMeta
(List. meta first rest count __hash)
IAssociative
ICollection
IComparable
ICounted
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIndexed
ILookup
IMapEntry
IMeta
IPrintWithWriter
IReduce
IReversible
ISeqable
ISequential
IStack
IVector
IWithMeta
(MapEntry. key val __hash)
(MultiFn. name dispatch-fn default-dispatch-val hierarchy method-table prefer-table method-cache cached-hierarchy)
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(NodeSeq. meta nodes i s __hash)
IAssociative
ICollection
ICounted
IEditableCollection
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IKVReduce
ILookup
IMap
IMeta
IPrintWithWriter
ISeqable
IWithMeta
(ObjMap. meta keys strobj update-count __hash)
IAssociative
ICloneable
ICollection
ICounted
IDrop
IEditableCollection
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIterable
IKVReduce
ILookup
IMap
IMeta
IPrintWithWriter
IReduce
ISeqable
IWithMeta
(PersistentArrayMap. meta cnt arr __hash)
(PersistentArrayMap.createAsIfByAssoc init)
(PersistentArrayMap.createAsIfByAssocComplexPath init has-trailing?)
(PersistentArrayMap.fromArray arr no-clone no-check)
ICollection
ICounted
IDrop
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(PersistentArrayMapSeq. arr i _meta)
IAssociative
ICloneable
ICollection
ICounted
IEditableCollection
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIterable
IKVReduce
ILookup
IMap
IMeta
IPrintWithWriter
ISeqable
IWithMeta
(PersistentHashMap. meta cnt root has-nil? nil-val __hash)
ICloneable
ICollection
ICounted
IEditableCollection
IEmptyableCollection
IEquiv
IFn
IHash
IIterable
ILookup
IMeta
IPrintWithWriter
ISeqable
ISet
IWithMeta
(PersistentHashSet. meta hash-map __hash)
(PersistentHashSet.createAsIfByAssoc items)
ICloneable
ICollection
ICounted
IEmptyableCollection
IEquiv
IHash
IIterable
IMeta
IPrintWithWriter
ISeq
ISeqable
ISequential
IStack
IWithMeta
(PersistentQueue. meta count front rear __hash)
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
ISeq
ISeqable
ISequential
IWithMeta
(PersistentQueueSeq. meta front rear __hash)
IAssociative
ICloneable
ICollection
ICounted
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IKVReduce
ILookup
IMap
IMeta
IPrintWithWriter
IReversible
ISeqable
ISorted
IWithMeta
(PersistentTreeMap. comp tree cnt meta __hash)
ICollection
ICounted
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(PersistentTreeMapSeq. meta stack ascending? cnt __hash)
ICloneable
ICollection
ICounted
IEmptyableCollection
IEquiv
IFn
IHash
ILookup
IMeta
IPrintWithWriter
IReversible
ISeqable
ISet
ISorted
IWithMeta
(PersistentTreeSet. meta tree-map __hash)
APersistentVector
IAssociative
ICloneable
ICollection
IComparable
ICounted
IDrop
IEditableCollection
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIndexed
IIterable
IKVReduce
ILookup
IMeta
IPrintWithWriter
IReduce
IReversible
ISeqable
ISequential
IStack
IVector
IWithMeta
(PersistentVector. meta cnt shift root tail __hash)
ICloneable
ICollection
ICounted
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(RSeq. ci i meta)
IChunkedNext
IChunkedSeq
ICloneable
ICollection
IEmptyableCollection
IEquiv
IHash
IIterable
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(Range. meta start end step chunk chunk-next __hash)
IAssociative
ICollection
IComparable
ICounted
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIndexed
ILookup
IMapEntry
IMeta
IPrintWithWriter
IReduce
IReversible
ISeqable
ISequential
IStack
IVector
IWithMeta
(RedNode. key val left right __hash)
ICollection
IDrop
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPending
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(Repeat. meta count val next __hash)
IAssociative
ICloneable
ICollection
IComparable
ICounted
IEmptyableCollection
IEquiv
IFind
IFn
IHash
IIndexed
IIterable
IKVReduce
ILookup
IMeta
IPrintWithWriter
IReduce
IReversible
ISeqable
ISequential
IStack
IVector
IWithMeta
(Subvec. meta v start end __hash)
(Symbol. ns name str _hash _meta)
(TaggedLiteral. tag form)
IPrintWithWriter
(TransformerIterator. buffer _next completed xf sourceIter multi)
(TransformerIterator.createMulti xform sources)
(TransientArrayMap. editable? len arr)
(TransientHashMap. edit root count has-nil? nil-val)
(TransientHashSet. transient-map)
(TransientVector. cnt shift root tail)
(UUID. uuid __hash)
ICollection
IEmptyableCollection
IEquiv
IHash
IMeta
INext
IPrintWithWriter
IReduce
ISeq
ISeqable
ISequential
IWithMeta
(ValSeq. mseq _meta)
(Var. val sym _meta)