1

私は機能を持っています:

(defn parse-file [stream map-filter]  
  (->> (xml/parse stream)  
       (:content)  
       (func args1)  
       (func args2)  
       (func args3)  
       (attrs)))

「func」という関数を使った式をマクロで生成したい。
ここにあります:

(defmacro gen-macro [map-filter seq]
  `(~@(map #(list 'another-func % %2 seq) map-filter)))

しかし、((func args1) (func args2) (func args2))
式の生成中に外側の括弧を削除するにはどうすればよいですか?

4

1 に答える 1

1

結果のリストを関数gen-macroの本体にスプライスしたいようです。parse-fileマクロにもならない限りparse-file、構文をその本体にスプライスすることはできません。

ただし、必要な機能を取得することはできます。少し変更する必要gen-macroがあります。

(defmacro gen-macro [map-filter seq]
  `(fn [x#] (->> x# ~@(map #(list 'another-func % %2) seq map-filter))))
于 2013-10-08T18:02:15.427 に答える