Learning Clojure by reimplementating
isaac.su