2013-12-09 15 views
10

mam zmaga się ze zrozumieniem, dlaczegoClojure: = vs ==

(= 1 1.0) 

ocenia się false natomiast

(== 1 1.0) 

ocenia się true. Według docs, == wydaje się działać tylko na liczbach, ale poza tym nie wydaje się dużą różnicą. Więc, czego mi brakuje?

+9

REPL to Twój najlepszy przyjaciel. (doc =) (doc ==) – Chiron

+0

To zwraca "zero" pod lighttable, czy wiesz dlaczego? – guiomie

Odpowiedz

18

== sprawdza równoważność matematyczną. = z numerami kontroli równoważności w sposób, który jest agnostykiem do wielkości w stosownych przypadkach, ale jest ścisły o reprezentacji:

user> (= (float 1.0) (double 1.0)) 
true 
user> (= (int 1) (byte 1)) 
true 
user> (= (int 1) (double 1)) 
false 
user> (= 0.5 (/ 1 2)) 
false 
user> (== 0.5 (/ 1 2)) 
true 

assumedly rozumowanie jest to, że reprezentacja zmiennoprzecinkowe mogą stracić precyzję i nie powinny być traktowane jako odpowiednik reprezentacji całkowitej lub dokładnej.