;comment
symbol a-zA-Z0-9*+!-_? ; <- both are valid symbols
:keyword
\c \h \a \r \a \c \t \e \r \newline \space \tab \return \linefeed
"string"
#"regex"
(a b c) ; list
[1 2 3] ; vector
{:a 1 :b 2} ; map
#{:a :b :c} ; set
(fn [x y] (+ x y)) ; anonymous fn
#(+ 1 1) ; short version, not a replacement for fn, eg. does not nest
#(inc %) ; one argument
#(+ %1 %2) ; numbered arguments
#(apply + %1 %2 %&) ; varargs
^x ; (meta x)
#^y x ; *not* equivalent to (with-meta x y)
@x ; (deref x)
#'x ; (var x)
; cool stuff
(-> {:foo {:bar :bat}} :foo :bar) ; gets :bat
(take 10 (repeatedly rand)) ; 10 random numbers
; Java interop
(Classname. args*)
; Old syntax: (Classname. ...) to be preferred
(new Classname args*)
(.getBytes "foo") ; "foo".getBytes();
(Math/sqrt x) ; Math.sqrt(x);
(.instanceMember instance args*)
(.instanceMember Classname args*)
(Classname/staticMethod args*)
; Old syntax: (.method ...) (Class/staticMethod ...) to be preferred
(. instance-expr member-symbol)
(. Classname-symbol member-symbol)
(. instance-expr (method-symbol args*)) or
(. instance-expr method-symbol args*)
(. Classname-symbol (method-symbol args*)) or
(. Classname-symbol method-symbol args*)
(-> instance-expr (.method ...) (.method ...))
; Obsoleted by the more general ->
(.. instance-expr member+)
(.. Classname-symbol member+)
(doto obj (.instanceMember) (.anotherInstanceMember args*) ...)