关于python:Clojure中的部分参数和命名参数

Partial and named arguments in Clojure

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

1
2
3
4
5
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
2
3
4
5
6
7
(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)