2014-09-28 18 views

回答

3

Clojure中沒有函數相等的一般定義。有微不足道的身份,如果兩個對象相同,他們適用於平等。但部分創建了一個新對象。例如:

user> (= (partial + 0) (partial + 0)) 
false 

作爲人類的讀者,我們可以看到,這些相同的功能(兩者都是相同的功能,+本身)。但是在Clojure語言中沒有邏輯允許確定這種平等。

1

由於

(apply + []) 
;0 

(+) 
;0 

...然後

(= (apply + []) (+)) 
;true 

...並且,進一步@noisesmith's answer

(= (partial +) +) 
;true 

...因爲partial有一個說法返回它。

(partial +) 
;#<core$_PLUS_ [email protected]> 

+ 
;#<core$_PLUS_ [email protected]> 

partial有幾個參數構建匿名函數對象。只有它們是相同的 - 同一個對象,函數纔是相等的。兩個這樣的電話partial - 即使有相同的論點 - 產生兩個不同的因此不平等的對象。

(partial partial +) 
;#<core$partial$fn__4198 [email protected]> 

(partial partial +) 
;#<core$partial$fn__4198 [email protected]> 
相關問題