Clojure中的部分和命名参数

时间:2013-03-26 09:36:03

标签: python clojure functional-programming partial higher-order-functions

我是一名Python程序员,只是在学习Clojure。在Python中,我喜欢在functools.partial调用中如何使用命名参数:

def pow(base, exponent):
    return base ** exponent

exp = partial(pow, 2.71828)           # exp(2) --> 7.3886
square = partial(pow, exponent=2)     # square(2) --> 4

exp的实现在Clojure中显然是等效的 - 但是我也可以使用partial来简洁地定义square吗?有没有办法将关键字/命名参数传递给partial,以便预先确定特定的参数?或者这不是由partial处理,而是由函数文字处理,例如#(pow % 2)

1 个答案:

答案 0 :(得分:1)

对于现有函数,您需要使用函数文字,因为它们不使用基于关键字的参数并使用位置参数。

对于你自己的功能,你可以做类似的事情:

(defn my-pow [& {:keys [base exponent]}]
  (Math/pow base exponent))

(def exp (partial my-pow :base 2.71828))
(exp :exponent 2)
(def square (partial my-pow :exponent 2))
(square :base 2)