Я написал функцию вероятности в Clojure, которая принимает необязательную хэш-карту параметров:
(defn roll-lte
([n d] (/ n d))
([n d options]
(let [p (/ n d)
roll-type (:type options :normal)]
(cond
(= roll-type :advantage) (- (* p 2) (* p p))
(= roll-type :disadvantage) (* p p)
(= roll-type :normal) p
:else (throw (IllegalArgumentException. "Invalid roll type."))))))
Это работает, как задумано, но идея состоит в том, чтобы написать другие функции, которые построены на этой функции - например:
(defn roll-gte
([n d] (roll-lte (- d n -1) d))
([n d options] (roll-lte (- d n -1) d options)))
Две арности в roll-lte
делают построение функции неудобным и повторяющимся, особенно в случаях, подобных описанному выше, где options
просто переадресовывается на roll-lte
. Есть ли более лаконичный и менее повторяющийся способ добиться этого?