This page contains resources related to
the Clojure programming language.
Article Change History
- added discussion about
println adding spaces
str to avoid it
- added indication of the specific thread pool
used by the
- improved description of Clojure Contrib
- added to a comment in the code example in the database section
that result sets obtained from
are not lazy sequences
- added clarification that
if is a special form,
not a macro
- changed "
cond function" to "
- changed "present working directory" to "print working directory"
- added that new special forms cannot be created
- improved around-zero macro example
- corrected descriptions of the characteristics of lists and vectors
- removed statement near beginning of Collections section
that Clojure strings can be treated as collections of characters;
they can be treated as sequences of characters
and that is mentioned later
- added that the vector returned by
shares structure with the orginal
- added that some functions that operate on a collection
return a collection of a different type
that has different characteristics
- improved discussion about forcing the evaluation of lazy sequences
in the "Sequences" section
- added explanation of why
typically faster than
- added more on
in sections on Lists and Vectors
new to syntax table
- added old style dot method for calling Java methods
to syntax table
- improved information on exiting a REPL
- fixed example of doc function
string? to list of
type testing predicate functions
- added example of using ^#'name to get metadata
- changed (set ...) to (hash-set ...) in syntactic sugar table
- added sorted-set and sorted-map to syntactic sugar table
- improved testing for vowels in Pig Latin example
- noted that keys can only sometimes be used as functions of maps
- noted that Clojure collections are preferred over Java collections
- replaced use of the term "variable"
with either "binding" or "symbol"
- added description of sets being used as functions of their items
- added note about vectors typically being preferred over lists
- added that
declare can take
any number of function names
- added a comment to main code of bank example
about sleeping twice during a
depositq is called twice
open-account function in bank example
(now using a ref instead of an atom to hold the map of accounts)
- added mentions of the
macros in clojure.contrib.core
- added :: to syntax table for creating keywords in the current namespace
- added information on creating private definitions using
macros in clojure.contrib.def
as the function that returns the namespace
of a given symbol or keyword
- improved description of "pure functions"
- removed mention of retrying transactions
that appeared too early
- changed "In reality" to "In practice"
- improved descriptions of "first-class functions"
and "higher-order functions"
- added Scheme to the list of
popular functional programming languages
- removed questionable description of the EPL license
and added a link to a FAQ on it
- upgraded discussion of Compojure to use the newest version
- added mention of
- added information about sending actions to agents from
inside transactions to support side effects
- changed time when macros are expanded from
read-time to compile-time
- added example of using
doseq and list comprehension
to iterate through all the keys and values in a map
- added information on test-is fixtures
- added link to clojure-contrib documentation
- changed references to "core" to "Clojure proper"
per suggestion from Rich Hickey
- added information about auto-gensym in macros
- clarified what causes a conflict in a transaction
- added Kawa Scheme to the list of functional programming languages
that run on the JVM
- replaced a class to ref-set with alter in bank example
- updated information on Compojure
to show use of new "deps" ant task and
change to the form-to function to use :post instead of POST
- added hyperlinks for Subversion and Ant
- added Armed Bear Common Lisp and OCaml-Java to the list of
functional programming languages that run on the JVM
- added missing right paren in an example in the Vars section
- added a brief reference to clojurescript
- added that reduce is the same as
inject in Ruby and foldl in Haskell
- added a statement about preferring alter and commute over ref-set
- changed clojure.contrib.test-is to clojure.test
- updated use of the test "are" macro
- added information about running the tests
that ship with Clojure
- added reduce to the list of important functions to understand
- added an alternate implementation of the polynomial function
- changed setup instructions from using Subversion to using Git
- 8/28/09 - added info. about why accessor functions are faster
than structmap lookups
- 9/7/09 - several spelling and grammatical corrections
identified by Yaron Goland. Thanks Yaron!
- 9/14/09 - large number of fixes suggested by Alex Stangl.
- 9/16/09 - updated link to clojure.contrib documentation.
Thanks Barry Teel!
- 9/24/09 - added link to STM article
- 10/2/09 - many minor typo fixes and wording improvements
- 10/12/09 - added reference to "hygienic macros"
- 1/1/10 - updated URL for Eclipse plugin
- 1/1/10 - improved description of test fixtures
- 1/20/10 - added link to a presentation on changes in 1.1
in Conclusion section
- 7/18/10 - updated information on downloading
Clojure core and contrib
- 7/21/10 - added explanation of
let assigning values
binding assigning values in parallel -
Thanks Ken Glidden!
- 11/19/10 - added warning that
add-watcher has been
add-watch which behaves differently,
but I still need to update the section on watchers.
Thanks Nicola Vitucci!
- 11/19/10 - removed statement that Scheme uses
car. Thanks Benjamin Dreus!
Even Jennifer Aniston has quit using other programming languages
and now prefers Clojure.
Check out the links to quotes from her below.