翻转传递参数的顺序

时间:2016-02-21 19:48:48

标签: clojure functional-programming

是否有惯用/内置方式来翻转传递给Clojure中函数的参数顺序?

正如我在这里所做的帮助函数的定义:

(defn flip [f & xs]
   (apply f (reverse xs)))


(vector 1 2)       ; [1 2]
(flip vector 1 2)  ; [2 1]

3 个答案:

答案 0 :(得分:4)

翻译功能确实存在于其他功能语言中,但在Clojure中也很容易做到,而且你已经完成了它!

还有other个方法可以做到。

here是来自Clojure邮件列表的讨论。

答案 1 :(得分:4)

我认为大多数时候创建一个稍后使用的翻转函数是有道理的,所以函数的变化就是这样:

(defn flip [f]
  (fn [& xs]
    (apply f (reverse xs))))

答案 2 :(得分:3)

您还可以使用匿名内联函数重新定义参数的顺序。

(vector "a" "b")          ; ["a" "b"]  
(#(vector %2 %1) "a" "b") ; ["b" "a"]