在球拍和计划中,我似乎记得一个名为less
的函数,它强加了对各种东西的排序,而不仅仅是数字。
(less 'a 'b) ;; -> true
(less 'b 'a) ;; -> false
(less 9 10) ;; -> true
这是否存在于clojure中是我的主要问题。
我知道Clojure中存在compare
,就像在(compare :b :c) ;; -> -1
中一样。但是,我想知道clojure中是否存在任何可订购事物的谓词,它返回第一个事物是否在排序中的第二个事物之前("小于"),返回一个布尔值。例如,clojure如何知道一个关键字是" less"比另一个?
答案 0 :(得分:3)
没有这样的功能,但您可以轻松创建一个:
(def less (comp neg? compare))
compare
期望这两个参数实现java.util.Comparable
界面,或者如果您不想使用对象默认比较实现,则可以传递java.util.Comparator
。
请注意,如果您尝试比较不同类的两个对象,通常会得到ClassCastException。试试(compare 1 :a)
对于关键字,他们的比较方法只是委托内部符号比较的实现,您可以找到here。如您所见,实现只是委托Java的String比较(如果忽略ns的东西)