Просто экспериментируя с ограничениями макросов или неизвестными, я не могу установить фиксированную длину для карты символов с измененными ключами во время выполнения.
Так что, когда k1 k2 передаются как аргументы для process-arity, это должно создать j1 j2 символовдля доступа к значениям k1 и k2 в макросе syms-from-map.
Предоставление ошибки компиляции:
CompilerException java.lang.IllegalArgumentException: Не знаю, как создать ISeq из: clojure.core $ mapцитирование без кавычек затрудняет написание макросов: - (
(defmacro syms-from-map[m]
`(let [~@(mapcat (fn[[k v]] [k v]) (var-get (resolve m)))]
(prn "got" ~'j1 ~'j2))
)
(defmacro process-arity[args]
`(let [] (fn ~args
(let [~'map1 (zipmap '[j1 j2] ~args)]
(syms-from-map ~'map1)
))))
(def test-m1 (process-arity [k1 k2]))
(apply test-m1 [1 2])