(defn balanced? ([s] (apply balanced? 0 (seq s))) ([current-count x & xs] (let [new-count (cond (= x \() (inc current-count) (= x \)) (dec current-count) :else current-count)] (if (< current-count 0) false (if xs (apply balanced? new-count xs) (= 0 new-count)))))) (balanced? " Hello (world))") (balanced? "Hello )) world ((") (balanced? "(") (balanced? "(hello world") (balanced? "(hello world)") (apply balanced? 0 (seq "()())(")) (balanced? "())(") (balanced? "()") (balanced? "(())")