general clojure functions