Правильная реализация вашего примера, удаляющая весь избыточный код, будет выглядеть следующим образом:
(defn sumdown
[sum x]
(recur (+ sum x) (dec x)))
Поскольку оба предложения «then» и «else» идентичны, а «do» являются избыточными (и в любомcase различные формы «do» предназначены для побочных эффектов).
Другие условия, которые следует учитывать: когда, cond, condp и case.