Используйте == для численных сравнений, где вы хотите узнать, представляют ли два числа одинаковое число независимо от типов:
user> (= 3/2 1.5)
false
user> (== 3/2 1.5)
true
Хотя имейте в виду, что == есть только для чисел и бросает, если задано что-то не число.
user> (== :1 :1)
ClassCastException clojure.lang.Keyword cannot be cast to java.lang.Number clojure.lang.Numbers.equiv (Numbers.java:206)
Ответ 2
Clojure пытается удержать вас от поплавков, поскольку они подвержены ошибкам округления:
user=> (+ 0.1 0.2)
0.30000000000000004
user=>
Таким образом, истинная причина неудачи сравнения заключается в том, что нет точного способа представления 1.5 внутри, и момента, когда парсер Clojure потребляет информацию "1.5", потенциально теряется.
Проще говоря, в Clojure отношение - это тип. Он не пытается преобразовать его в double или float или что-нибудь в этом роде. Таким образом, вы можете сохранить то, что фактически представляет количество, не теряя при этом никакой точности.
Выписка Rich Rich Hickey под названием "Clojure для Java-программистов" на YouTube, он объясняет это лучше.