reimplement clojure for fun