The text below is the comment from the top of src/clojinc/core.clj. When it refers to "this file" it is referring to that file.
The same content is also available in the form of a Gorilla REPL worksheet, in worksheet.clj
. The worksheet can also be viewed here.
;; clojinc
;; Steps toward clojure, starting from zero.
;; by Lee Spector <[email protected]>, 2011-2017
;; Version (date): 20170914
;; This file is a saved, re-executable Clojure REPL (Read Eval Print Loop)
;; session, with minimal comments and occasional problem sets. It is intended
;; to serve as the starting-point for semi-independent learning of the Clojure
;; programming language, for people who have at least some minimal experience
;; with at least one (any) programming language. No help is provided here for
;; getting a Clojure implementation/REPL up and running; consult the online
;; resources listed below, or search the web, if you need help with that.
;; The format of this file is alternating Clojure expressions with
;; commented-out output (including both the output produced by explicit print
;; statements and the values returned by the evaluated expressions). You should
;; be able to proceed through the file, evaluating an expression at a time, and
;; if you do this you should get the same output (or similar output, in cases
;; that involve nondeterminism). In many cases later expressions rely on having
;; evaluated earlier expressions in the file.
;; The material in this file is informal and idiosyncratic in its coverage,
;; leaving out many things that other Clojure introductions include and revealing
;; the Lisp-oriented bias of the author. The intention is just to lead beginners
;; deeply enough into Clojure territory for them to proceed in other directions
;; on their own.
;; More specifically, we begin with simple expressions for arithmetic and list
;; manipulation, introduce facilities for defining functions and macros, and give
;; progressively more complex examples of definitions that involve many of
;; Clojure's data structures including lists, vectors, maps, and sets. Among the
;; applications used for examples and problem sets are grammar-driven text
;; generation, genetic programming, and simple graphics. We also demonstrate
;; alternatives for defining iterative and recursive algorithms and briefly touch
;; upon topics ranging from debugging and profiling to file I/O and concurrency.
;; Many things are introduced here without explanation. My suggestion is that
;; you observe the output that is provided here, look things up in online resources
;; and in documentation that may be available in your Clojure environment, and,
;; most crucially, experiment with variations of the expressions presented here.
;; The problem sets are prods for further experimentation but it is best to
;; experiment continuously. Some of the problems provided here are easy, some are
;; quite hard, and many could be completed/varied/extended in several different
;; ways.
;; Potentially useful online resources include:
;; http://clojure.org
;; https://clojure.org/guides/getting_started
;; http://groups.google.com/group/clojure
;; https://4clojure.oxal.org
;; http://clojuredocs.org
;; http://www.clojure-toolbox.com
;; https://www.youtube.com/channel/UCaLlzGqiPE2QRj6sSOawJRg
;; http://planet.clojure.in/
;; Most of the outputs in clojinc were created using clojure version 1.3 in a
;; REPL started with Leiningen 1.7.1 (https://github.com/technomancy/leiningen)
;; and using Java 1.6.0_33. (A few were left from an earlier version, for which
;; Clooj (https://github.com/arthuredelstein/clooj) was used.