機能がスレッド化マクロに似ている (と思う) マクロを作成しようとしていますが、これにより、前のフォームの挿入が行われる場所にキーワードを指定できます。clojure.walk/prewalk-replace を使用する予定でしたが、clojure.lang.ArityException が発生しました。コードは次のとおりです。
(defmacro streamops [data form]
(let [keewurd :...]
(cond
(not (seq? form)) form
(= (count form) 0) data
:else (streamops ~(clojure.walk/prewalk-replace
{keewurd data} (first form))
~(rest form)))))`
しかし、単体テストを適用しようとすると:
(= (macroexpand '(streamops 3 ( (+ 1 :...) (* :... 2))))
'(* (+ 1 3) 2))
以下を生成します。
clojure.lang.ArityException: Wrong number of args (-1) passed to: walk$prewalk-replace
Compiler.java:6473 clojure.lang.Compiler.macroexpand1
core.clj:3633 clojure.core/macroexpand-1
core.clj:3642 clojure.core/macroexpand
私は何を間違っていますか?