```
;;gets a list like (1 + (1 + 2))
;;returns (+ 1 (+ 1 2))
(defmacro infix [expression]
(letfn [(helper [expression]
(cond (not (list? expression)) expression
(= (count expression) 0) '()
(= (count expression) 1) (recur (first expression))
(not (function? (first expression))) (let [a (first expression)
op (second expression)
b (nth expression 2)]
(recur (cons (list op a b)
(drop 3 expression))))
:else expression))]
(helper expression)))
(macroexpand '(infix (1 + 1 * 2 * 4))) ;; => ((+ 1 1) * 2 * 4)
(macroexpand '(infix (((1))))) ;; => 1
```

The second recur seems to not work (in *(not (function? ....)*). What is wrong with the code?