Mark Volkmann's Clojure Logo Page

This page contains resources related to the Clojure programming language.

Article Change History

  1. added discussion about println adding spaces and using str to avoid it
  2. added indication of the specific thread pool used by the future function
  3. improved description of Clojure Contrib
  4. added to a comment in the code example in the database section that result sets obtained from with-query-results are not lazy sequences
  5. added clarification that if is a special form, not a macro
  6. changed "cond function" to "cond macro"
  7. changed "present working directory" to "print working directory"
  8. added that new special forms cannot be created
  9. improved around-zero macro example
  10. corrected descriptions of the characteristics of lists and vectors
  11. 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
  12. added that the vector returned by subvec shares structure with the orginal
  13. added that some functions that operate on a collection return a collection of a different type that has different characteristics
  14. improved discussion about forcing the evaluation of lazy sequences in the "Sequences" section
  15. added explanation of why doseq is typically faster than dorun
  16. added more on conj and cons in sections on Lists and Vectors
  17. added new to syntax table
  18. added old style dot method for calling Java methods to syntax table
  19. improved information on exiting a REPL
  20. fixed example of doc function
  21. added string? to list of type testing predicate functions
  22. added example of using ^#'name to get metadata
  23. changed (set ...) to (hash-set ...) in syntactic sugar table
  24. added sorted-set and sorted-map to syntactic sugar table
  25. improved testing for vowels in Pig Latin example
  26. noted that keys can only sometimes be used as functions of maps
  27. noted that Clojure collections are preferred over Java collections
  28. replaced use of the term "variable" with either "binding" or "symbol"
  29. added description of sets being used as functions of their items
  30. added note about vectors typically being preferred over lists
  31. added that declare can take any number of function names
  32. added a comment to main code of bank example about sleeping twice during a transfer since depositq is called twice
  33. improved open-account function in bank example (now using a ref instead of an atom to hold the map of accounts)
  34. added mentions of the .?. and -?> macros in clojure.contrib.core
  35. added :: to syntax table for creating keywords in the current namespace
  36. added information on creating private definitions using macros in clojure.contrib.def
  37. changed find-ns to namespace as the function that returns the namespace of a given symbol or keyword
  38. improved description of "pure functions"
  39. removed mention of retrying transactions that appeared too early
  40. changed "In reality" to "In practice"
  41. improved descriptions of "first-class functions" and "higher-order functions"
  42. added Scheme to the list of popular functional programming languages
  43. removed questionable description of the EPL license and added a link to a FAQ on it
  44. upgraded discussion of Compojure to use the newest version
  45. added mention of *warn-on-reflection*
  46. added information about sending actions to agents from inside transactions to support side effects
  47. changed time when macros are expanded from read-time to compile-time
  48. added example of using doseq and list comprehension to iterate through all the keys and values in a map
  49. added information on test-is fixtures
  50. added link to clojure-contrib documentation
  51. changed references to "core" to "Clojure proper" per suggestion from Rich Hickey
  52. added information about auto-gensym in macros
  53. clarified what causes a conflict in a transaction
  54. added Kawa Scheme to the list of functional programming languages that run on the JVM
  55. replaced a class to ref-set with alter in bank example
  56. 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
  57. added hyperlinks for Subversion and Ant
  58. added Armed Bear Common Lisp and OCaml-Java to the list of functional programming languages that run on the JVM
  59. added missing right paren in an example in the Vars section
  60. added a brief reference to clojurescript
  61. added that reduce is the same as inject in Ruby and foldl in Haskell
  62. added a statement about preferring alter and commute over ref-set
  63. changed clojure.contrib.test-is to clojure.test
  64. updated use of the test "are" macro
  65. added information about running the tests that ship with Clojure
  66. added reduce to the list of important functions to understand
  67. added an alternate implementation of the polynomial function
  68. changed setup instructions from using Subversion to using Git
  69. 8/28/09 - added info. about why accessor functions are faster than structmap lookups
  70. 9/7/09 - several spelling and grammatical corrections identified by Yaron Goland. Thanks Yaron!
  71. 9/14/09 - large number of fixes suggested by Alex Stangl. Thanks Alex!
  72. 9/16/09 - updated link to clojure.contrib documentation. Thanks Barry Teel!
  73. 9/24/09 - added link to STM article
  74. 10/2/09 - many minor typo fixes and wording improvements
  75. 10/12/09 - added reference to "hygienic macros"
  76. 1/1/10 - updated URL for Eclipse plugin
  77. 1/1/10 - improved description of test fixtures
  78. 1/20/10 - added link to a presentation on changes in 1.1 in Conclusion section
  79. 7/18/10 - updated information on downloading Clojure core and contrib
  80. 7/21/10 - added explanation of let assigning values sequentially and binding assigning values in parallel - Thanks Ken Glidden!
  81. 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!
  82. 11/19/10 - removed statement that Scheme uses first instead of 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.

Sound Clip #1 Sound Clip #2