I was browsing core.clj in Clojure's source code and came across the definition of defn
. The function it defines takes several arguments, the first of which are &form
and &env
:
(def
defn (fn defn [&form &env name & fdecl]
;; ...
))
Do these names take on special meaning because they start with &
?
I know about rest args and the shorthand anonymous function var %&
, but this doesn't seem to be either of those things.
I wasn't able to find anything about this syntax in the Reader reference, which doesn't mention &
explicitly:
Symbols begin with a non-numeric character and can contain alphanumeric characters and *, +, !, -, _, ', ?, <, > and = (other characters may be allowed eventually).
Reading Clojure Characters also doesn't appear to mention this. resolve
includes an &env
arg in its doc string but doesn't elaborate.
(let [&a 1, a&b 2] [&a a&b]) => [1 2]
. - Thumbnail