Макрос Clojure, который строит функцию более высокого порядка из функции

Я пытаюсь написать макрос, который создает промежуточное ПО, похожее на то, которое используется в compojure.

Я хочу иметь возможность позвонить:

(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 ~@body))))

Любая помощь или указатель на лучшее руководство по написанию макросов было бы здорово, спасибо.

5
задан jdoig 11 June 2012 в 20:05
поделиться