2013-12-09 9 views
10

sto lottando con la comprensione perchéClojure: = vs ==

(= 1 1.0) 

viene valutato come false mentre

(== 1 1.0) 

restituisce true. Secondo lo docs, il numero == sembra funzionare solo sui numeri, ma a parte questo non sembra esserci molta differenza. Quindi, cosa mi sto perdendo?

+9

REPL è il tuo migliore amico. (doc =) (doc ==) – Chiron

+0

Questo restituisce "nil" sotto lighttable, sapresti perché? – guiomie

risposta

18

== controlli per l'equivalenza matematica. = con i numeri dei controlli per l'equivalenza in un modo che è agnostico per dimensioni, se del caso, ma è rigorosa circa la rappresentazione:

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, il ragionamento è che la rappresentazione di virgola mobile può perdere la precisione, e non deve essere trattata come equivalente a rappresentazioni integrali o esatte.