Not exactly the same problem, but you might like to see an infix implementation from “The Joy of Clojure” by Fogus and Chouser.
http://fogus.me/fun/unfix/infix-src.html
The “Joy” code makes intermediate calculations as it goes. I tweaked it a bit to make a data-reader that only does the infix to prefix transformation. That’s probably closer to what you want.
https://gist.github.com/miner/5224709
Note: the “Joy” code uses vector notation for grouping. You would have to adapt it to use lists.
Here’s the relevant code from my gist, leaving out the data-reader part:
(def && #(and % %2))
(def || #(or % %2))
(def ops '[- + * / < > && || =])
(def rank (zipmap ops (iterate inc 1)))
(def op? rank)
(defn infix
[[a b & [c d e & m]]]
(cond
(vector? a) (recur (list* (infix a) b c d e m))
(vector? c) (recur (list* a b (infix c) d e m))
(op? b) (if (and d (< (rank b 0) (rank d 0)))
(recur (list a b (infix (list* c d e m))))
(recur (list* (list b a c) d e m)))
:else a))
;; example
(infix '[1 + 3 * 4 - 5])
;=> (+ 1 (- (* 3 4) 5))