Mark Volkmann's
Page
This page contains resources related to
the Clojure programming language.
Article Change History
- added discussion about
println
adding spaces
and using str
to avoid it
- added indication of the specific thread pool
used by the
future
function
- improved description of Clojure Contrib
- added to a comment in the code example in the database section
that result sets obtained from
with-query-results
are not lazy sequences
- added clarification that
if
is a special form,
not a macro
- changed "
cond
function" to "cond
macro"
- 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
subvec
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
doseq
is
typically faster than dorun
- added more on
conj
and cons
in sections on Lists and Vectors
- added
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
- added
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
transfer
since deposit
q is called twice
- improved
open-account
function in bank example
(now using a ref instead of an atom to hold the map of accounts)
- added mentions of the
.?.
and -?>
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
- changed
find-ns
to namespace
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
*warn-on-reflection*
- 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.
Thanks Alex!
- 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
sequentially and binding
assigning values in parallel -
Thanks Ken Glidden!
- 11/19/10 - added warning that
add-watcher
has been
replaced by 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
first
instead of car
. Thanks Benjamin Dreus!
Sounds
Even Jennifer Aniston has quit using other programming languages
and now prefers Clojure.
Check out the links to quotes from her below.