「一般的な」式を特定の値に対して評価される式に変換するマクロを作成しようとしています。
次の形式の未評価の式のベクトルがあるとしましょう。
'[(map? %)
(-> % :value string?)
(fn[x] (apply #(pos? %) (- x 2))]
実行時に上記の式に「渡し」たいgensymed値vがあります。したがって、v がコンパイル時に使用されるシンボルの名前であると仮定します。また、変換された式をアサートしたいと考えています。基本的に、上記の例では、上記のベクトル式を以下の形式に変換したいと考えています。最初の 2 つの式では値 v を % に渡し、3 番目の式では x に渡していることに注意してください。以下のコードは正しくありませんが、私がやりたいことを示しているだけです。以下の式アサーションのいずれかに実際に v を入れる方法がわかりません。
'[(assert (map? %)) ;; % is equal to v
(assert (-> % :value string?)) ;; % is equal to v
(assert (fn[x] (apply #(pos? %) (- x 2)))] ;; x is equal to v
参考例として、prepost-map の :post 部分を実行できるようにしたいと考えています。defn式で行います。どんな助けでも大歓迎です。