¿Cómo puedo hacer que una macro Clojure actúe como una función, por lo que puedo pasarla como un argumento, por ejemplo? Esperaría tener que envolverlo de alguna manera.Tratar macro Clojure como una función
No esperaría que la versión empaquetada se comportara exactamente igual que la macro original (diferencias de llamada por nombre vs llamada por valor), pero sería útil en algunos casos donde esto no era importante.
Hm, esto no funciona para las macros variadic: user => (apply # (or%) [true false false]) java.lang.IllegalArgumentException: Número incorrecto de args (3) pasados a: user $ eval3 $ fn (NO_SOURCE_FILE: 0) – pauldoo
3 puntos: (1) la mejor manera de resolver este ejemplo es '(alguna identidad [true false false])', (2) si conoce el número de params y lo hace explícito, es ' Hago el truco: '(aplicar # (o% 1% 2% 3) [true false false])', (3) el hacky 'make-fn' funciona:' (apply (make-fn or) [true false falso]) ' – trptcolin