Хорошая вещь в макросах - вам не нужно копаться в классах или чем-то в этом роде. Вам просто нужно написать код, который генерирует правильные s-выражения .
Сначала функция для генерации s-выражения типа (.setName 42)
(defn make-call [name val]
(list (symbol (str ".set" name) val)))
затем макрос для генерации выражений и вставьте (~ @) их в doto
выражение.
(defmacro map-set [class things]
`(doto ~class ~@(map make-call things))
Поскольку это макрос, он никогда не должен знать, к какому классу относится объект, к которому он вызывается, и даже к тому, что класс, для которого он будет использоваться, существует.