添削について確認してみた

([obj methodname & methodnames] `(concat (obj-values ~obj ~methodname) (obj-values ~obj ~@methodnames)))
この場合、obj が複数回評価されうるのでよろしくないと思います。
`(let [obj# ~obj]
(concat (obj-values obj# ~methodname) (obj-values obj# ~@methodnames)))))
こんなんが良い、かも?

マクロ練習第二弾 - Java オブジェクトのメソッド名とメソッドの値のマップを返す - 地獄のネコブログ

確認しました。
確かに私の実装ですと、インスタンスが2回生成されてしまいます。

(macroexpand-1 '(obj-values (java.io.File. ".") lastModified canRead))
;↓結果
(clojure.core/concat (user/obj-values (java.io.File. ".") lastModified) (user/ob
j-values (java.io.File. ".") canRead))

ちなみに引用先は私ができなかった分のメソッド名と値のMap版や更なる発展版もあって参考になります。素晴らしいですね。