В оригинальной версии проверка (if (not ...))
происходила во время компиляции; вместо этого вы включили его в расширенный код. Итак, вот минимальное изменение, которое заставит его работать так, как вы хотите - оно фактически совпадает с оригиналом, но «переворачивает» то, что указано, а что нет.
(defmacro my-recursive-infix [form]
(let [third (nth form 2)]
`(~(second form) ~(first form)
~(if (not (seq? third))
third
`(my-recursive-infix ~third)))))
Тем не менее, немного лучше использовать деструктуризацию, чтобы вытащить части формы раньше, чем на месте:
(defmacro my-recursive-infix [form]
(let [[x op y] form]
`(~op ~x ~(if (not (seq? y))
y
`(my-recursive-infix ~y)))))
И, что еще лучше, действительно, переместить нерекурсивный регистр наружу, чтобы (а) он работал для литеральных чисел, и (б) код больше походил на то, что он расширяет:
(defmacro my-recursive-infix [form]
(if-not (seq? form)
form
(let [[x op y] form]
`(~op ~x (my-recursive-infix ~y)))))