Tengo dos macros. El primero toma un símbolo como el único parámetro (porque se pasa a def, que necesita un símbolo). La segunda función toma una lista de símbolos y debe llamar a la primera con cada símbolo individualmente.En clojure, ¿cómo puedo evaluar los argumentos a una macro desde otra macro?
(defmacro m1 [s]
'(let [f# ... dynamic function definition ...]
(def ~s f#))
La segunda macro debe tener una lista de símbolos y pasarlos a la primera, pero no puedo hacer que funcione. Lo mejor que podía venir fue el siguiente:
(defmacro m2 [symbols]
`(for [s# ~symbols] (eval (read-string (str "(name.of.current.namespace/m1 " s# ")")))))
que obliga al s#
a ser evaluados antes de pasar a la primera macro. También se invoca con una lista de cadenas, en lugar de una lista de símbolos.
Esto es útil para una biblioteca que estoy usando para la cual todas las funciones en la biblioteca toman los mismos dos primeros parámetros. Estoy intentando crear funciones de envoltura, en mi espacio de nombres, para algunas de las funciones, que proporciona automáticamente los primeros dos valores de parámetros que son comunes a todos ellos.
¿Alguna idea para mejorar esto?
¿Por qué un fn llano no es una opción aquí? Algo parecido a '(defn m2fun [symbols] (map m1 symbols))' – skuro
¿Puedes usar partial? Realmente no entiendo cuál es el problema. – nickik