Как изменить атрибут :arglist для clojure fn или макроса?
(defn tripler ^{:arglists ([b])} [a] (* 3 a))
(defn ^{:arglists ([b])} quadrupler [a] (* 4 a))
% (meta #'tripler) =>
{:arglists ([a]), :ns #<Namespace silly.testing>, :name tripler, :line 1, :file "NO_SOURCE_PATH"}
% (meta #'quadrupler) =>
{:arglists ([a]), :ns #<Namespace silly.testing>, :name quadrupler, :line 1, :file "NO_SOURCE_PATH"}
Хорошо, не повезло, поэтому я попытался сделать следующее.
(def tripler
(with-meta trippler
(assoc (meta #'tripler) :arglists '([c]))))
% (with-meta #'tripler) =>
{:ns #<Namespace silly.testing>, :name tripler, :line 1, :file "NO_SOURCE_PATH"}
Хм, так теперь ключ :arglists пропал? Ну, я сдаюсь, как мне это сделать? Я просто хотел бы изменить значение :arglists. В приведенных выше примерах используется defn, но я также хотел бы знать, как установить :arglists с помощью макроса (defmacro).