doc find-doc apropos dir source pst javadoc (foo.bar/ is namespace for later syms)
Long: 7, hex 0xff, oct 017, base 2 2r1011, base 36 36rCRAZY BigInt: 7N Ratio: -22/7 Double: 2.78 -1.2e-5 BigDecimal: 4.2M
+ - * / quot rem mod inc dec max min +' -' *' inc' dec'
== < > <= >= compare
bit-and bit-or bit-xor bit-not bit-flip bit-set bit-shift-right bit-shift-left bit-and-not bit-clear bit-test (1.6) unsigned-bit-shift-right (see BigInteger for integers larger than Long)
byte short int long float double bigdec bigint num rationalize biginteger
zero? pos? neg? even? odd? number? rational? integer? ratio? decimal? float?
rand rand-int
with-precision
*unchecked-math* unchecked-add unchecked-dec unchecked-inc unchecked-multiply unchecked-negate unchecked-subtract
str format "a string" "escapes \b\f\n\t\r\" octal \377 hex \ucafe" See also section IO/to string
count get subs compare (clojure.string/) join escape split split-lines replace replace-first reverse (1.5) re-quote-replacement (java.lang.String) .indexOf .lastIndexOf
#"pattern" re-find re-seq re-matches re-pattern re-matcher re-groups (clojure.string/) replace replace-first (1.5) re-quote-replacement Note: \ in #"" is not escape char. (re-pattern "\\s*\\d+") can be written #"\s*\d+"
#""
(re-pattern "\\s*\\d+")
#"\s*\d+"
(clojure.string/) capitalize lower-case upper-case
(clojure.string/) trim trim-newline triml trimr
char char? string? (clojure.string/) blank? (java.lang.String) .startsWith .endsWith .contains
char char-name-string char-escape-string literals: \a \newline (more at link)
keyword keyword? find-keyword literals: :kw :my.ns/kw ::in-cur-ns
symbol symbol? gensym literals: my-sym my.ns/foo
literals: true false nil
count empty not-empty into conj (clojure.walk/) walk prewalk prewalk-demo prewalk-replace postwalk postwalk-demo postwalk-replace
distinct? empty? every? not-every? some not-any?
sequential? associative? sorted? counted? reversible?
coll? list? vector? set? map? seq? (1.6) record?
() list list*
first nth peek .indexOf .lastIndexOf
cons conj rest pop
[] vector vec vector-of mapv filterv (clojure.core.rrb-vector/) vector vec vector-of
(my-vec idx) → ( nth my-vec idx) get peek .indexOf .lastIndexOf
(my-vec idx)
( nth my-vec idx)
assoc pop subvec replace conj rseq update-in (1.7) update
reduce-kv
#{} set hash-set (clojure.data.int-map/) int-set dense-int-set
sorted-set sorted-set-by (clojure.data.avl/) sorted-set sorted-set-by (flatland.ordered.set/) ordered-set
(my-set item) → ( get my-set item) contains?
(my-set item)
( get my-set item)
conj disj
(clojure.set/) union difference intersection select See also section Relations
(clojure.set/) subset? superset?
rseq subseq rsubseq
{} hash-map array-map zipmap bean frequencies group-by (clojure.set/) index (clojure.data.int-map/) int-map
sorted-map sorted-map-by (clojure.data.avl/) sorted-map sorted-map-by (flatland.ordered.map/) ordered-map (clojure.data.priority-map/) priority-map (flatland.useful.map/) ordering-map
(my-map k) → ( get my-map k) also (:key my-map) → ( get my-map :key) get-in contains? find keys vals
(my-map k)
( get my-map k)
(:key my-map)
( get my-map :key)
assoc assoc-in dissoc merge merge-with select-keys update-in (1.7) update (clojure.set/) rename-keys map-invert GitHub: Medley
key val
clojure.lang.PersistentQueue/EMPTY (no literal syntax or constructor fn)
peek
conj pop
(clojure.set/) join select project union difference intersection index rename
transient persistent!
conj! pop! assoc! dissoc! disj! Note: always use return value for later changes, never original!
= identical? not= not compare clojure.data/diff
true? false? instance? nil? (1.6) some?
seq vals keys rseq subseq rsubseq sequence
lazy-seq repeatedly iterate
repeat range
file-seq line-seq resultset-seq re-seq tree-seq xml-seq iterator-seq enumeration-seq
keep keep-indexed
distinct filter remove take-nth for
cons conj concat lazy-cat mapcat cycle interleave interpose
rest nthrest next fnext nnext drop drop-while take-last for
take take-while butlast drop-last for
conj concat distinct flatten group-by partition partition-all partition-by split-at split-with filter remove replace shuffle
reverse sort sort-by compare
map pmap map-indexed mapcat for replace seque
first second last rest next ffirst nfirst fnext nnext nth nthnext rand-nth when-first max-key min-key
zipmap into reduce reductions set vec into-array to-array-2d mapv filterv
apply
some filter
doseq dorun doall (1.7) run!
realized?
map mapcat filter remove take take-while take-nth drop drop-while replace partition-by partition-all keep keep-indexed map-indexed distinct interpose (1.7) cat dedupe random-sample
(1.7) completing ensure-reduced unreduced See also section Concurrency/Volatiles
into sequence (1.7) transduce eduction
reduced reduced? deref
zipper seq-zip vector-zip xml-zip
up down left right leftmost rightmost
lefts rights path children
make-node replace edit insert-child insert-left insert-right append-child remove
next prev
root node branch? end?
spit slurp (to writer/from reader, Socket, string with file name, URI, etc.)
pr prn print printf println newline (clojure.pprint/) print-table
(clojure.pprint/) pprint cl-format also: (binding [*out* writer] ...)
format with-out-str pr-str prn-str print-str println-str
read-line (clojure.tools.reader.edn/) read
line-seq (clojure.tools.reader.edn/) read also: (binding [*in* reader] ...) java.io.Reader
with-in-str (clojure.tools.reader.edn/) read-string
with-open (clojure.java.io/) text: reader writer binary: input-stream output-stream
(.write ostream byte-arr) (.read istream byte-arr) java.io.OutputStream java.io.InputStream GitHub: gloss byte-spec
flush (.close s) file-seq *in* *out* *err* (clojure.java.io/) file copy delete-file resource as-file as-url as-relative-path GitHub: fs
*data-readers* default-data-readers (1.5) *default-data-reader-fn*
fn defn defn- definline identity constantly memfn comp complement partial juxt memoize fnil every-pred some-fn
apply -> ->> trampoline (1.5) as-> cond-> cond->> some-> some->>
fn? ifn?
( defprotocol Slicey (slice [at]))
(
Slicey (slice [at]))
( extend-type String Slicey (slice [at] ...))
String Slicey (slice [at] ...))
( extend-type nil Slicey (slice [_] nil))
nil Slicey (slice [_] nil))
( reify Slicey (slice [at] ...))
Slicey (slice [at] ...))
satisfies? extends?
extend extend-protocol extenders
( defrecord Pair [h t])
Pair [h t])
(:h (Pair. 1 2)) → 1
(:h (Pair. 1 2))
1
Pair. ->Pair map->Pair
record?
( deftype Pair [h t])
(.h (Pair. 1 2)) → 1
(.h (Pair. 1 2))
Pair. ->Pair
( deftype Pair [h t] Object (toString [this] (str "<" h "," t ">")))
Pair [h t] Object (toString [this] (str "<" h "," t ">")))
( defmulti my-mm dispatch-fn)
my-mm dispatch-fn)
( defmethod my-mm :dispatch-value [args] ...)
my-mm :dispatch-value [args] ...)
get-method methods
remove-method remove-all-methods
prefer-method prefers
derive underive isa? parents ancestors descendants make-hierarchy
defmacro definline
macroexpand-1 macroexpand (clojure.walk/) macroexpand-all
and or when when-not when-let when-first if-not if-let cond condp case (1.6) when-some if-some
for doseq dotimes while
.. doto -> ->> (1.5) as-> cond-> cond->> some-> some->>
binding locking time with-in-str with-local-vars with-open with-out-str with-precision with-redefs with-redefs-fn
lazy-cat lazy-seq delay
assert comment doc
,
'
quote: 'form → ( quote form)
'form
form)
/
\
:
;
^
*foo*
'earmuffs' - convention to indicate dynamic vars, compiler warns if not dynamic
@
Deref: @form → ( deref form)
@form
`
Syntax-quote
foo#
'auto-gensym', consistently replaced with same auto-generated symbol everywhere inside same `( ... )
`( ... )
~
Unquote
~@
Unquote-splicing
->
'thread first' macro ->
->>
'thread last' macro ->>
[
{
#'
Var-quote: #'x → ( var x)
#'x
x)
#"
#"p"
#{
#(
Anonymous function literal: #(...) → (fn [args] (...))
#(...)
(fn [args] (...))
%
Anonymous function argument: %N is value of anonymous function arg N. % short for %1. %& for rest args.
%N
N
%1
%&
#?
(1.7) Reader conditional: #?(:clj x :cljs y) reads as x on JVM, y in ClojureScript, nothing elsewhere. Other keys: :cljr :default
#?(:clj x :cljs y)
x
y
:cljr :default
#?@
(1.7) Splicing reader conditional: [1 #?(:clj [x y] :cljs [w z]) 3] reads as [1 x y 3] on JVM, [1 w z 3] in ClojureScript, [1 3] elsewhere.
[1 #?(:clj [x y] :cljs [w z]) 3]
[1 x y 3]
[1 w z 3]
[1 3]
#foo
tagged literal e.g. #inst #uuid
#inst
#uuid
$
JavaContainerClass$InnerClass
foo?
conventional ending for a predicate, e.g.: zero? vector? instance? (unenforced)
foo!
conventional ending for an unsafe operation, e.g.: set! swap! alter-meta! (unenforced)
_
conventional name for an unused value (unenforced)
#_
^{:key1 val1 :key2 val2 ...}
^Type → ^{:tag Type} ^:key → ^{:key true}
^Type
^{:tag Type}
^:key
^{:key true}
^:dynamic ^:private ^:doc ^:const
(defn ^:private ^String my-fn ...) (def ^:dynamic *dyn-var* val)
(defn ^:private ^String my-fn ...)
(def ^:dynamic *dyn-var* val)
meta with-meta vary-meta alter-meta! reset-meta! doc find-doc test
def if do let letfn quote var fn loop recur set! throw try monitor-enter monitor-exit
(examples) let fn defn defmacro loop for doseq if-let when-let (1.6) if-some when-some
def defn defn- definline defmacro defmethod defmulti defonce defrecord
declare intern binding find-var var
with-local-vars var-get var-set alter-var-root var? bound? thread-bound?
set-validator! get-validator
*ns*
(tutorial) ns in-ns create-ns
alias def import intern refer
all-ns find-ns
ns-name ns-aliases ns-map ns-interns ns-publics ns-refers ns-imports
resolve ns-resolve namespace the-ns
ns-unalias ns-unmap remove-ns
(tutorial) require use import refer
loaded-libs
load load-file load-reader load-string
atom swap! reset! compare-and-set!
future future-call future-done? future-cancel future-cancelled? future?
bound-fn bound-fn* get-thread-bindings push-thread-bindings pop-thread-bindings thread-bound?
(1.7) volatile! vreset! vswap! volatile?
locking pcalls pvalues pmap seque promise deliver
ref
deref @ (
(deref form)
sync dosync io!
ensure ref-set alter commute
ref-history-count ref-min-history ref-max-history
agent
agent-error
send send-off restart-agent (1.5) send-via set-agent-send-executor! set-agent-send-off-executor!
await await-for
add-watch remove-watch
shutdown-agents
error-handler set-error-handler! error-mode set-error-mode!
*agent* release-pending-sends
.. doto Classname/ Classname. new bean comparator enumeration-seq import iterator-seq memfn set! class class? bases supers type gen-class gen-interface definterface
boolean byte short char int long float double bigdec bigint num cast biginteger
throw try catch finally pst ex-info ex-data
make-array object-array boolean-array byte-array short-array char-array int-array long-array float-array double-array aclone to-array to-array-2d into-array
aget aset aset-boolean aset-byte aset-short aset-char aset-int aset-long aset-float aset-double alength amap areduce
booleans bytes shorts chars ints longs floats doubles
proxy get-proxy-class construct-proxy init-proxy
proxy-mappings proxy-super update-proxy
clojure.xml/parse xml-seq
*1 *2 *3 *e *print-dup* *print-length* *print-level* *print-meta* *print-readably*
*compile-files* *compile-path* *file* *warn-on-reflection* compile loaded-libs test
eval force hash name *clojure-version* clojure-version *command-line-args*
(clojure.java.browse/) browse-url (clojure.java.shell/) sh with-sh-dir with-sh-env
You need to enable Javascript in your browser to edit pages.
help on how to format text
Clojure 1.7 Cheat Sheet (v32)
Download PDF version, Download other versions with tooltips- Many thanks to Steve Tayon for creating it and Andy Fingerhut for ongoing maintenance.
Documentation
doc find-doc apropos dir source pst javadoc (foo.bar/ is namespace for later syms)Primitives
Numbers
Long: 7, hex 0xff, oct 017, base 2 2r1011, base 36 36rCRAZY BigInt: 7N Ratio: -22/7 Double: 2.78 -1.2e-5 BigDecimal: 4.2M+ - * / quot rem mod inc dec max min +' -' *' inc' dec'== < > <= >= comparebit-and bit-or bit-xor bit-not bit-flip bit-set bit-shift-right bit-shift-left bit-and-not bit-clear bit-test (1.6) unsigned-bit-shift-right (see BigInteger for integers larger than Long)byte short int long float double bigdec bigint num rationalize bigintegerzero? pos? neg? even? odd? number? rational? integer? ratio? decimal? float?rand rand-intwith-precision*unchecked-math* unchecked-add unchecked-dec unchecked-inc unchecked-multiply unchecked-negate unchecked-subtractStrings
str format "a string" "escapes \b\f\n\t\r\" octal \377 hex \ucafe" See also section IO/to stringcount get subs compare (clojure.string/) join escape split split-lines replace replace-first reverse (1.5) re-quote-replacement (java.lang.String) .indexOf .lastIndexOf#"pattern" re-find re-seq re-matches re-pattern re-matcher re-groups (clojure.string/) replace replace-first (1.5) re-quote-replacement Note: \ in#""is not escape char.(re-pattern "\\s*\\d+")can be written#"\s*\d+"(clojure.string/) capitalize lower-case upper-case(clojure.string/) trim trim-newline triml trimrchar char? string? (clojure.string/) blank? (java.lang.String) .startsWith .endsWith .containsOther
char char-name-string char-escape-string literals: \a \newline (more at link)keyword keyword? find-keyword literals: :kw :my.ns/kw ::in-cur-nssymbol symbol? gensym literals: my-sym my.ns/fooliterals: true false nilCollections
Collections
count empty not-empty into conj (clojure.walk/) walk prewalk prewalk-demo prewalk-replace postwalk postwalk-demo postwalk-replacedistinct? empty? every? not-every? some not-any?sequential? associative? sorted? counted? reversible?coll? list? vector? set? map? seq? (1.6) record?Lists (conj, pop, & peek at beginning)
() list list*first nth peek .indexOf .lastIndexOfcons conj rest popVectors (conj, pop, & peek at end)
[] vector vec vector-of mapv filterv (clojure.core.rrb-vector/) vector vec vector-of(my-vec idx)→( nth my-vec idx)get peek .indexOf .lastIndexOfassoc pop subvec replace conj rseq update-in (1.7) updatereduce-kvSets
#{} set hash-set (clojure.data.int-map/) int-set dense-int-setsorted-set sorted-set-by (clojure.data.avl/) sorted-set sorted-set-by (flatland.ordered.set/) ordered-set(my-set item)→( get my-set item)contains?conj disj(clojure.set/) union difference intersection select See also section Relations(clojure.set/) subset? superset?rseq subseq rsubseqMaps
{} hash-map array-map zipmap bean frequencies group-by (clojure.set/) index (clojure.data.int-map/) int-mapsorted-map sorted-map-by (clojure.data.avl/) sorted-map sorted-map-by (flatland.ordered.map/) ordered-map (clojure.data.priority-map/) priority-map (flatland.useful.map/) ordering-map(my-map k)→( get my-map k)also(:key my-map)→( get my-map :key)get-in contains? find keys valsassoc assoc-in dissoc merge merge-with select-keys update-in (1.7) update (clojure.set/) rename-keys map-invert GitHub: Medleyreduce-kvkey valrseq subseq rsubseqQueues (conj at end, peek & pop from beginning)
clojure.lang.PersistentQueue/EMPTY (no literal syntax or constructor fn)peekconj popRelations (set of maps, each with same keys, aka rels)
(clojure.set/) join select project union difference intersection index renameTransients (clojure.org/transients)
transient persistent!conj! pop! assoc! dissoc! disj! Note: always use return value for later changes, never original!Misc
= identical? not= not compare clojure.data/difftrue? false? instance? nil? (1.6) some?Sequences
Creating a Lazy Seq
seq vals keys rseq subseq rsubseq sequencelazy-seq repeatedly iteraterepeat rangefile-seq line-seq resultset-seq re-seq tree-seq xml-seq iterator-seq enumeration-seqkeep keep-indexedSeq in, Seq out
distinct filter remove take-nth forcons conj concat lazy-cat mapcat cycle interleave interposerest nthrest next fnext nnext drop drop-while take-last fortake take-while butlast drop-last forconj concat distinct flatten group-by partition partition-all partition-by split-at split-with filter remove replace shufflereverse sort sort-by comparemap pmap map-indexed mapcat for replace sequeUsing a Seq
first second last rest next ffirst nfirst fnext nnext nth nthnext rand-nth when-first max-key min-keyzipmap into reduce reductions set vec into-array to-array-2d mapv filtervapplysome filterdoseq dorun doall (1.7) run!realized?Transducers (clojure.org/transducers)
map mapcat filter remove take take-while take-nth drop drop-while replace partition-by partition-all keep keep-indexed map-indexed distinct interpose (1.7) cat dedupe random-sample(1.7) completing ensure-reduced unreduced See also section Concurrency/Volatilesinto sequence (1.7) transduce eductionreduced reduced? derefZippers (clojure.zip/)
zipper seq-zip vector-zip xml-zipup down left right leftmost rightmostlefts rights path childrenmake-node replace edit insert-child insert-left insert-right append-child removenext prevroot node branch? end?IO
spit slurp (to writer/from reader, Socket, string with file name, URI, etc.)pr prn print printf println newline (clojure.pprint/) print-table(clojure.pprint/) pprint cl-format also: (binding [*out* writer] ...)format with-out-str pr-str prn-str print-str println-strread-line (clojure.tools.reader.edn/) readline-seq (clojure.tools.reader.edn/) read also: (binding [*in* reader] ...) java.io.Readerwith-in-str (clojure.tools.reader.edn/) read-stringwith-open (clojure.java.io/) text: reader writer binary: input-stream output-stream(.write ostream byte-arr) (.read istream byte-arr) java.io.OutputStream java.io.InputStream GitHub: gloss byte-specflush (.close s) file-seq *in* *out* *err* (clojure.java.io/) file copy delete-file resource as-file as-url as-relative-path GitHub: fs*data-readers* default-data-readers (1.5) *default-data-reader-fn*Functions
fn defn defn- definline identity constantly memfn comp complement partial juxt memoize fnil every-pred some-fnapply -> ->> trampoline (1.5) as-> cond-> cond->> some-> some->>fn? ifn?Abstractions (Clojure type selection flowchart)
Protocols (clojure.org/protocols)
(defprotocolSlicey (slice [at]))(extend-typeString Slicey (slice [at] ...))(extend-typenil Slicey (slice [_] nil))(reifySlicey (slice [at] ...))satisfies? extends?extend extend-protocol extendersRecords (clojure.org/datatypes)
(defrecordPair [h t])(:h (Pair. 1 2))→1Pair. ->Pair map->Pairrecord?Types (clojure.org/datatypes)
(deftypePair [h t])(.h (Pair. 1 2))→1Pair. ->Pair(deftypePair [h t]Object
(toString [this] (str "<" h "," t ">")))
Multimethods (clojure.org/multimethods)
(defmultimy-mm dispatch-fn)(defmethodmy-mm :dispatch-value [args] ...)get-method methodsremove-method remove-all-methodsprefer-method prefersderive underive isa? parents ancestors descendants make-hierarchyMacros
defmacro definlinemacroexpand-1 macroexpand (clojure.walk/) macroexpand-alland or when when-not when-let when-first if-not if-let cond condp case (1.6) when-some if-somefor doseq dotimes while.. doto -> ->> (1.5) as-> cond-> cond->> some-> some->>binding locking time with-in-str with-local-vars with-open with-out-str with-precision with-redefs with-redefs-fnlazy-cat lazy-seq delayassert comment docSpecial Characters (clojure.org/reader, tutorial)
,'quote:'form→(quoteform)/\:;^*foo*'earmuffs' - convention to indicate dynamic vars, compiler warns if not dynamic@Deref:@form→(derefform)`Syntax-quotefoo#'auto-gensym', consistently replaced with same auto-generated symbol everywhere inside same`( ... )~Unquote~@Unquote-splicing->'thread first' macro ->->>'thread last' macro ->>([{#'Var-quote:#'x→(varx)#"#"p"reads as regex pattern p (see Strings/Regex section)#{#(Anonymous function literal:#(...)→(fn [args] (...))%Anonymous function argument:%Nis value of anonymous function argN.%short for%1.%&for rest args.#?(1.7) Reader conditional:#?(:clj x :cljs y)reads asxon JVM,yin ClojureScript, nothing elsewhere. Other keys::cljr :default#?@(1.7) Splicing reader conditional:[1 #?(:clj [x y] :cljs [w z]) 3]reads as[1 x y 3]on JVM,[1 w z 3]in ClojureScript,[1 3]elsewhere.#footagged literal e.g.#inst#uuid$JavaContainerClass$InnerClassfoo?conventional ending for a predicate, e.g.: zero? vector? instance? (unenforced)foo!conventional ending for an unsafe operation, e.g.: set! swap! alter-meta! (unenforced)_conventional name for an unused value (unenforced)#_Metadata (clojure.org/reader, special_forms)
^{:key1 val1 :key2 val2 ...}^Type→^{:tag Type}^:key→^{:key true}^:dynamic ^:private ^:doc ^:const(defn ^:private ^String my-fn ...)(def ^:dynamic *dyn-var* val)meta with-meta vary-meta alter-meta! reset-meta! doc find-doc testSpecial Forms (clojure.org/special_forms)
def if do let letfn quote var fn loop recur set! throw try monitor-enter monitor-exit(examples) let fn defn defmacro loop for doseq if-let when-let (1.6) if-some when-someVars and global environment (clojure.org/vars)
def defn defn- definline defmacro defmethod defmulti defonce defrecorddeclare intern binding find-var varwith-local-vars var-get var-set alter-var-root var? bound? thread-bound?set-validator! get-validatorNamespace
*ns*(tutorial) ns in-ns create-nsalias def import intern referall-ns find-nsns-name ns-aliases ns-map ns-interns ns-publics ns-refers ns-importsresolve ns-resolve namespace the-nsns-unalias ns-unmap remove-nsLoading
(tutorial) require use import referloaded-libsload load-file load-reader load-stringConcurrency
atom swap! reset! compare-and-set!future future-call future-done? future-cancel future-cancelled? future?bound-fn bound-fn* get-thread-bindings push-thread-bindings pop-thread-bindings thread-bound?(1.7) volatile! vreset! vswap! volatile?locking pcalls pvalues pmap seque promise deliverRefs and Transactions (clojure.org/refs)
refderef @ (@form →(deref form))sync dosync io!ensure ref-set alter commuteset-validator! get-validatorref-history-count ref-min-history ref-max-historyAgents and Asynchronous Actions (clojure.org/agents)
agentagent-errorsend send-off restart-agent (1.5) send-via set-agent-send-executor! set-agent-send-off-executor!await await-forset-validator! get-validatoradd-watch remove-watchshutdown-agentserror-handler set-error-handler! error-mode set-error-mode!*agent* release-pending-sendsJava Interoperation (clojure.org/java_interop)
.. doto Classname/ Classname. new bean comparator enumeration-seq import iterator-seq memfn set! class class? bases supers type gen-class gen-interface definterfaceboolean byte short char int long float double bigdec bigint num cast bigintegerthrow try catch finally pst ex-info ex-dataArrays
make-array object-array boolean-array byte-array short-array char-array int-array long-array float-array double-array aclone to-array to-array-2d into-arrayaget aset aset-boolean aset-byte aset-short aset-char aset-int aset-long aset-float aset-double alength amap areducebooleans bytes shorts chars ints longs floats doublesProxy (Clojure type selection flowchart)
proxy get-proxy-class construct-proxy init-proxyproxy-mappings proxy-super update-proxyOther
clojure.xml/parse xml-seq*1 *2 *3 *e *print-dup* *print-length* *print-level* *print-meta* *print-readably**compile-files* *compile-path* *file* *warn-on-reflection* compile loaded-libs testeval force hash name *clojure-version* clojure-version *command-line-args*(clojure.java.browse/) browse-url (clojure.java.shell/) sh with-sh-dir with-sh-env