Cheatsheet Usletter Color
Cheatsheet Usletter Color
9, sheet v44) Relations (set of maps, each with same keys, aka rels)
Rel algebra (clojure.set/) join select project union difference intersection index
rename
Documentation
clojure.repl/ doc find-doc apropos dir source pst javadoc (foo.bar/ is namespace Transients (clojure.org/reference/transients)
for later syms) Create transient persistent!
Change conj! pop! assoc! dissoc! disj! Note: always use return value for later changes,
never original!
Primitives Misc
Compare = identical? not= not compare clojure.data/diff
Numbers Test true? false? instance? nil? some?
Literals 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
Arithmetic + - * / quot rem mod inc dec max min +’ -’ *’ inc’ dec’ Sequences
Compare == < > <= >= compare Creating a Lazy Seq
Bitwise bit-and bit-or bit-xor bit-not bit-flip bit-set From collection seq vals keys rseq subseq rsubseq sequence
bit-shift-right bit-shift-left bit-and-not bit-clear bit-test From producer fn lazy-seq repeatedly iterate
unsigned-bit-shift-right (see BigInteger for integers larger than From constant repeat range
Long) From other file-seq line-seq resultset-seq re-seq tree-seq xml-seq
Cast byte short int long float double bigdec bigint num rationalize iterator-seq enumeration-seq
biginteger From seq keep keep-indexed
Test zero? pos? neg? even? odd? number? rational? integer? ratio?
decimal? float? (1.9) double? int? nat-int? neg-int? pos-int? Seq in, Seq out
Random rand rand-int Get shorter distinct filter remove take-nth for (1.7) dedupe random-sample
BigDecimal with-precision Get longer cons conj concat lazy-cat mapcat cycle interleave interpose
Unchecked *unchecked-math* unchecked-add unchecked-dec unchecked-inc Tail-items rest nthrest next fnext nnext drop drop-while take-last for
unchecked-multiply unchecked-negate unchecked-subtract Head-items take take-while butlast drop-last for
‘Change’ conj concat distinct flatten group-by partition partition-all
Strings
partition-by split-at split-with filter remove replace shuffle
Create str format "a string" "escapes \b\f\n\t\r\" octal \377 hex \ucafe" See Rearrange reverse sort sort-by compare
also section IO/to string Process items map pmap map-indexed mapcat for replace seque
Use count get subs compare (clojure.string/) join escape split split-lines
replace replace-first reverse (1.8) index-of last-index-of Using a Seq
Regex #"pattern" re-find re-seq re-matches re-pattern re-matcher re-groups Extract item first second last rest next ffirst nfirst fnext nnext nth
(clojure.string/) replace replace-first re-quote-replacement Note: \ in #"" nthnext rand-nth when-first max-key min-key
is not escape char. (re-pattern "\\s*\\d+") can be written #"\s*\d+" Construct coll zipmap into reduce reductions set vec into-array to-array-2d
Letters (clojure.string/) capitalize lower-case upper-case mapv filterv
Trim (clojure.string/) trim trim-newline triml trimr Pass to fn apply
Test string? (clojure.string/) blank? (1.8) starts-with? ends-with? includes? Search some filter
Force evaluation doseq dorun doall (1.7) run!
Other
Check for forced realized?
Characters char char? char-name-string char-escape-string literals: \a \newline
(more at link)
Keywords keyword keyword? find-keyword literals: :kw :my.name.space/kw Transducers (clojure.org/reference/transducers)
::in-cur-namespace ::namespace-alias/kw
Off the shelf map mapcat filter remove take take-while take-nth drop
Symbols symbol symbol? gensym literals: my-sym my.ns/foo
drop-while replace partition-by partition-all keep keep-indexed
Misc literals: true false nil
map-indexed distinct interpose (1.7) cat dedupe random-sample
(1.9) halt-when
Create your own (1.7) completing ensure-reduced unreduced See also section Concur-
rency/Volatiles
Collections
Use into sequence (1.7) transduce eduction
Collections Early termination reduced reduced? deref
Generic ops count empty not-empty into conj (clojure.walk/) walk prewalk
prewalk-demo prewalk-replace postwalk postwalk-demo
postwalk-replace (1.9) bounded-count Spec (rationale, guide)
Content tests distinct? empty? every? not-every? some not-any? Operations valid? conform unform explain explain-data explain-str
Capabilities sequential? associative? sorted? counted? reversible? explain-out form describe assert check-asserts check-asserts?
Type tests coll? list? vector? set? map? seq? record? (1.8) map-entry? Generator ops gen exercise exercise-fn
Defn. & registry def fdef registry get-spec spec? spec with-gen
Lists (conj, pop, & peek at beginning)
Logical and or
Create () list list* Collection coll-of map-of every every-kv keys merge
Examine first nth peek .indexOf .lastIndexOf Regex cat alt * + ? & keys*
‘Change’ cons conj rest pop Range int-in inst-in double-in int-in-range? inst-in-range?
Vectors (conj, pop, & peek at end) Other nilable multi-spec fspec conformer
Custom explain explain-printer *explain-out*
Create [] vector vec vector-of mapv filterv (clojure.core.rrb-vector/) vector vec
vector-of Predicates with test.check generators
Examine (my-vec idx) → ( nth my-vec idx) get peek .indexOf .lastIndexOf Numbers number? rational? integer? ratio? decimal? float? zero? (1.9)
‘Change’ assoc assoc-in pop subvec replace conj rseq update-in (1.7) update double? int? nat-int? neg-int? pos-int?
Ops reduce-kv Symbols, keyword? symbol? (1.9) ident? qualified-ident? qualified-keyword?
keywords qualified-symbol? simple-ident? simple-keyword? simple-symbol?
Sets
Other string? true? false? nil? some? (1.9) boolean? bytes? inst? uri?
Create unsorted #{} set hash-set
scalars uuid?
Create sorted sorted-set sorted-set-by (clojure.data.avl/) sorted-set
Collections list? map? set? vector? associative? coll? sequential? seq? empty?
sorted-set-by (flatland.ordered.set/) ordered-set (clojure.data.int-
(1.9) indexed? seqable?
map/) int-set dense-int-set
Other (1.9) any?
Examine (my-set item) → ( get my-set item) contains?
‘Change’ conj disj
Set ops (clojure.set/) union difference intersection select See also section IO
Relations to/from spit slurp (to writer/from reader, Socket, string with file name, URI, etc.)
Test (clojure.set/) subset? superset? ...
Sorted sets rseq subseq rsubseq to *out* pr prn print printf println newline (clojure.pprint/) print-table
to writer (clojure.pprint/) pprint cl-format also: (binding [*out* writer] ...)
Maps
to string format with-out-str pr-str prn-str print-str println-str
Create unsorted {} hash-map array-map zipmap bean frequencies group-by (clo- from *in* read-line (clojure.tools.reader.edn/) read
jure.set/) index from reader line-seq (clojure.tools.reader.edn/) read also: (binding [*in* reader]
Create sorted sorted-map sorted-map-by (clojure.data.avl/) sorted-map ...) java.io.Reader
sorted-map-by (flatland.ordered.map/) ordered-map from string with-in-str (clojure.tools.reader.edn/) read-string
(clojure.data.priority-map/) priority-map (flatland.useful.map/) Open with-open (clojure.java.io/) text: reader writer binary: input-stream
ordering-map (clojure.data.int-map/) int-map output-stream
Examine (my-map k) → ( get my-map k) also (:key my-map) → ( get Binary (.write ostream byte-arr) (.read istream byte-arr)
my-map :key) get-in contains? find keys vals java.io.OutputStream java.io.InputStream GitHub: gloss byte-spec
‘Change’ assoc assoc-in dissoc merge merge-with select-keys update-in Misc flush (.close s) file-seq *in* *out* *err* (clojure.java.io/) file
(1.7) update (clojure.set/) rename-keys map-invert GitHub: Medley copy delete-file resource as-file as-url as-relative-path GitHub:
Ops reduce-kv fs
Entry key val Data readers *data-readers* default-data-readers *default-data-reader-fn*
Sorted maps rseq subseq rsubseq