0

我是一名刚刚学习 Clojure 的 Python 程序员。在 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

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

4

1 回答 1

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)
于 2013-03-26T10:12:50.877 回答