SICP in clojure