私は、コンパイルに使用されているミドルウェアに似たミドルウェアを構築するマクロを作成しようとしています。関数から高次関数を構築するClojureマクロ
私が呼び出すことができるようにしたい:
(def-middleware plus-two [x]
(+ 2 x))
をし、その結果は次のようになります:私はこれまでのところは、オンラインのガイドを読んでから持っているが、それは出て働いていない
(defn plus-two [f]
(fn [x]
(f (+ 2 x)))
私のために:
(defmacro def-middleware [fn-name args & body]
'(defn ~fn-name [f]
(fn ~args
(f [email protected]))))
より良いマクロ作成ガイドへの助けや偉大な、ありがとう。
user=> (clojure.pprint/pprint (macroexpand-1 '(def-middleware plus-two [x] (+ 2 x))))
(defn
~fn-name
[f]
$
(fn ~args$ (f (clojure.core/unquote-splicing body))))
ない正確に、我々は後にしているもの:
どのようにあなたのためにうまくいかないのですか? –
CompilerException java.lang.RuntimeException:defへの最初の引数は、コンパイルするシンボルでなければなりません。(NO_SOURCE_PATH:33) – jdoig
一重引用符ではなくバックティックを使用します – Alex