Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否存在对Clojure中的关键字施加顺序的谓词?_Clojure - Fatal编程技术网

是否存在对Clojure中的关键字施加顺序的谓词?

是否存在对Clojure中的关键字施加顺序的谓词?,clojure,Clojure,在racket和scheme中,我似乎记得一个名为less的函数,它对所有东西施加排序,而不仅仅是数字 (less 'a 'b) ;; -> true (less 'b 'a) ;; -> false (less 9 10) ;; -> true clojure中是否存在这种情况是我的主要问题 我知道compare存在于Clojure中,就像(compare:b:c);->-1。但是,我想知道clojure中是否有一个简单的可排序事物谓词,它返回排序中第一个事物是否在第二个事

在racket和scheme中,我似乎记得一个名为
less
的函数,它对所有东西施加排序,而不仅仅是数字

(less 'a 'b) ;; -> true
(less 'b 'a) ;; -> false
(less 9 10) ;; -> true
clojure中是否存在这种情况是我的主要问题


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

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

(def less (comp neg? compare))
compare
期望这两个参数实现
java.util.Comparable
接口,或者如果不想使用对象默认的比较实现,可以传递
java.util.Comparator

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

在关键字的情况下,它们的比较方法只是委托给内部符号比较的实现,您可以找到内部符号比较。如您所见,该实现只是委托给Java的字符串比较(如果忽略ns内容)