В качестве побочного проекта я создаю Clojure DSL для синтеза изображений (. клиск).
Я немного не уверен в наилучшем подходе к именованию функций, когда у меня есть функции в DSL, аналогичные функциям в ядре Clojure, например, функция +
или что-то подобное требуется в моем DSL для аддитивной компоновки изображений/выполнения векторные математические операции.
Насколько я вижу, есть несколько вариантов:
+
)в моем собственном пространстве имен. Выглядит красиво в коде DSL, но переопределит версию clojure.core, что может вызвать проблемы. Люди могли запутаться.my-ns/+
). Избегает конфликтов, но не позволяет людям use
использовать пространство имен для удобства и выглядит немного некрасиво.v+
). Может быть легко use
d и избежать конфликтов, но имя немного уродливое и может оказаться трудным для запоминания.vector-add
). Подробно, но описательно, без коллизий.clojure.core/+
и переопределить с помощью мультиметода+
(как предполагает Георгек ).Пример кода может выглядеть примерно так:
(show (v+ [0.9 0.6 0.3]
(dot [0.2 0.2 0]
(vgradient (vseamless 1.0 plasma) ))))
Каков наилучший/наиболее идиоматический подход?