Опитвам се да напиша макрос, подобен (мисля) по функция на макроса за нишки, но това ще ми позволи да посоча ключова дума, където ще се случи вмъкването на предишния формуляр. Планирах да използвам 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
какво правя грешно