命名参数在Clojure中起作用

Chi*_*ron 3 functional-programming clojure

这段代码在"Clojure的喜悦"中讨论了Clojure中的命名参数:

(defn slope [& {:keys [p1 p2] :or {p1 [0 0] p2 [1 1]}}] 
   (float (/ (- (p2 1) (p1 1))
             (- (p2 0) (p1 0)))))

(slope :p1 [4 15] :p2 [3 21])
Run Code Online (Sandbox Code Playgroud)

函数本身,我理解它 - 解构没有问题 - 但我不理解调用.
我们是否将四个论点传递给斜率?如何将矢量分配给:p1和:p2?

dfa*_*fan 8

你正在向坡度传递四个论点,是的.所述[]的部分slope指定了参数,在其中&表示"发出声音的附加参数成为这种形式",然后指定它在寻求一种能够形成具有键的映射参数p1p2(如果不存在给出的默认值).