clojure-koans/src/path_to_enlightenment.clj

70 lines
2.1 KiB
Clojure
Raw Normal View History

(ns path-to-enlightenment
2010-10-29 15:07:11 +00:00
(:use [clojure.test])
(:require [clojure.set]
[clojure.string]
[clojure.test]))
2011-02-03 18:26:58 +00:00
(def __ :fill-in-the-blank)
(def ___ (fn [& args] __))
(defn ^:dynamic handle-problem []
(System/exit 0))
(defmacro meditations [& forms]
(let [pairs (partition 2 forms)
pairs (conj pairs
["Bootstrap for file/line reporting"
'(clojure.test/is (= 0 0))])
tests (map (fn [[doc# code#]]
`(if (is ~code# ~doc#)
:pass
(handle-problem)))
pairs)]
`(do ~@tests)))
2010-07-12 23:19:54 +00:00
(def ordered-koans
["equalities"
2010-07-12 23:11:15 +00:00
"lists"
"vectors"
"sets"
"maps"
"functions"
"conditionals"
"higher_order_functions"
"runtime_polymorphism"
2011-03-31 13:11:27 +00:00
"lazy_sequences"
2010-07-12 23:11:15 +00:00
"sequence_comprehensions"
2010-11-17 04:23:33 +00:00
"creating_functions"
2010-11-06 22:38:31 +00:00
"recursion"
2010-11-10 02:19:10 +00:00
"destructuring"
"refs"
2011-03-31 12:44:54 +00:00
"atoms"
2011-02-11 01:13:52 +00:00
"macros"
"datatypes"])
2010-07-11 21:04:37 +00:00
(defn require-version [[required-major required-minor]]
(let [{:keys [major minor]} *clojure-version*]
(if (or (< major required-major)
(and (== major required-major) (< minor required-minor)))
(throw (Exception. (str "Clojure version " required-major "."
required-minor " or higher required."))))))
(defn parse-required-version []
(let [rdr (clojure.lang.LineNumberingPushbackReader.
(java.io.FileReader. (java.io.File. "project.clj")))
project-form (read rdr)
version-string (->> project-form
(drop 3)
(apply hash-map)
:dependencies
(map (fn [xs] (vec (take 2 xs))))
(into {})
('org.clojure/clojure))]
(map read-string
(take 3 (clojure.string/split version-string #"[\.\-]")))))
2010-07-12 23:19:54 +00:00
(defn run []
(require-version (parse-required-version))
(doall (map (comp load (partial str "koans/")) ordered-koans))
2010-07-12 23:19:54 +00:00
(println "You have achieved clojure enlightenment. Namaste."))