Playing with some clojure code while solving some of karan/Projects I discovered my solutions differ a lot when thinking in a functional way doing programming in Clojure than doing the same in Ruby some time ago. almost arriving at a declerative style in this case
(defn count-vowels "Take string S count vowels return map of vowel to count." [s] (let [up-inc (fnil inc 0) counts (reduce #(update %1 (string/lower-case %2) up-inc) {} s) vowels #{"a" "e" "i" "o" "u"}] (select-keys counts vowels))) (count-vowels (generators/string generators/printable-ascii-char 1000))
Not sure why the concept of building a dataset and selecting what is relevant felt more natural than imperativly building up the data here, but it did for me somehow and the code reads quite nicely.