Струящиеся сквозь аргументы Macro

Я пытаюсь написать макрос в Cljure, что позволяет оценить серию простых «Def» выражений. Я N00B, когда дело доходит до макросов. Идея состоит в том, что

(my-defs y1 1
     y2 "taco")

следует расширить до

(do (def y1 1) (def y2 "taco"))

Следующий код выполняет это для особого случая двух дефектов

(defmacro my-defs 
  [& args]
  `(do
     (def ~(first args) ~(second args))
     (def ~(nth args 2) ~(nth args 3) )))

, что приятно, но у меня возникли проблемы обобщению этого. Я попробовал несколько наивных вещей, связанных с циркой через привязки элементов (раздел 2 args) , но я всегда получил мусор (я знаю, что это не очень специфично, но разнообразие и степень мусора казалось Бит слишком много, чтобы сообщить здесь). Как я верую по ней и оцениваю свои дели?

P.S. Макрос My-defs - это игрушка. То, что я действительно хочу достичь в конце, это макрос-литерный помощник, который мог создать кучу многометных экземпляров. В настоящее время у меня есть большие куски кода, похожее на

(defmethod f [A B] [x] "AB")
(defmethod f [A A] [x] "AA")
(defmethod f [C B] [x] "CB")

, что немного неприглядно. Было бы здорово, если бы я мог сделать что-то вроде

(defmethods f
  [A B] [x] "AB"
  [A A] [x] "AA"
  [C B] [x] "CB")

вместо этого.

6
задан Gabriel Mitchell 5 September 2011 в 22:07
поделиться