macro are way to create defn during runtime
deftype and defrecord adhere to protocols
java-interop is one of the powerful feature of Clojure; That way, Clojure is extensible and useful along with entire Java Ecosystem
Clojure provides many functions for data generation - partition, repeat, repeatedly, iterate, range
Enlightened by this koan; Now, go read about defrecord and deftype :)