Functional programming Clojure中的命名参数函数
这段代码讨论了Clojure中“Clojure的乐趣”中的命名参数: 函数本身,我理解它-解构没有问题-但我不理解调用。Functional programming Clojure中的命名参数函数,functional-programming,clojure,Functional Programming,Clojure,这段代码讨论了Clojure中“Clojure的乐趣”中的命名参数: 函数本身,我理解它-解构没有问题-但我不理解调用。 我们是否将四个参数传递给slope?向量是如何分配给:p1和:p2的?您正在向slope传递四个参数,是的。slope的[]部分指定了参数,其中&表示“将所有附加参数转换为此形式”,然后指定它正在查找构成带有键p1和p2的映射的参数(如果其中一个不存在,则给出默认值).我知道了,但调用时:(slope:p1[4 15]:p2[3 21])p1如何获得值[4 15]和p2[3
我们是否将四个参数传递给slope?向量是如何分配给:p1和:p2的?您正在向slope传递四个参数,是的。
slope
的[]
部分指定了参数,其中&
表示“将所有附加参数转换为此形式”,然后指定它正在查找构成带有键p1
和p2
的映射的参数(如果其中一个不存在,则给出默认值).我知道了,但调用时:(slope:p1[4 15]:p2[3 21])p1如何获得值[4 15]和p2[3 21]?p1
获得值[4 15]
,因为参数:p1[4 15]:p2[3 21]
被视为映射,slope
中的参数块表示将变量p1
和p2
绑定到该映射中相应的值。
(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])