是否存在对Clojure中的关键字强加订单的谓词?

时间:2014-08-14 22:12:15

标签: clojure

在球拍和计划中,我似乎记得一个名为less的函数,它强加了对各种东西的排序,而不仅仅是数字。

(less 'a 'b) ;; -> true
(less 'b 'a) ;; -> false
(less 9 10) ;; -> true

这是否存在于clojure中是我的主要问题。

我知道Clojure中存在compare,就像在(compare :b :c) ;; -> -1中一样。但是,我想知道clojure中是否存在任何可订购事物的谓词,它返回第一个事物是否在排序中的第二个事物之前("小于"),返回一个布尔值。例如,clojure如何知道一个关键字是" less"比另一个?

1 个答案:

答案 0 :(得分:3)

没有这样的功能,但您可以轻松创建一个:

(def less (comp neg? compare))

compare期望这两个参数实现java.util.Comparable界面,或者如果您不想使用对象默认比较实现,则可以传递java.util.Comparator

请注意,如果您尝试比较不同类的两个对象,通常会得到ClassCastException。试试(compare 1 :a)

对于关键字,他们的比较方法只是委托内部符号比较的实现,您可以找到here。如您所见,实现只是委托Java的String比较(如果忽略ns的东西)