Определение частичных функций с уменьшенной арностью

Иногда мне кажется удобным определять в Clojure версии функций с уменьшенной арностью, которые возвращают частичную функцию, например

(defn prefix 
  ([pre string] 
    (str pre ":" string))

  ([pre] 
    (fn [string]
      (prefix pre string)))) 

Это означает, что вы можете сделать следующее:

(prefix "foo" 78979)
=> "foo:78979"

((prefix "foo") 78979)
=> "foo:78979"

Это кажется довольно похожим на Haskell и позволяет избежать необходимости partialдля создания частичных функций

Но считается ли это хорошим стилем кодирования/API дизайн на Лиспе?

8
задан mikera 21 May 2012 в 02:07
поделиться