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 简单比较器未按(I)预期排序_Clojure - Fatal编程技术网

Clojure 简单比较器未按(I)预期排序

Clojure 简单比较器未按(I)预期排序,clojure,Clojure,我希望这个代码片段能够生成原始向量,但排序方式不区分大小写。取而代之的是,我得到了原始向量。为什么我的比较器不工作 user=> (ns user (require [clojure.contrib.string :as str])) nil user=> (sort (comparator #(compare (str/upper-case %1) (str/upper-case %2))) ["B" "a" "c" "F" "r" "E"])

我希望这个代码片段能够生成原始向量,但排序方式不区分大小写。取而代之的是,我得到了原始向量。为什么我的比较器不工作

user=> (ns user (require [clojure.contrib.string :as str]))
nil
user=> (sort 
         (comparator #(compare (str/upper-case %1) (str/upper-case %2)))
         ["B" "a" "c" "F" "r" "E"])
("B" "a" "c" "F" "r" "E")

comparator
在给定谓词时返回
java.util.comparator
(返回true或false的函数)。如果显式使用
compare
,则不需要它。所以只要:

(sort #(compare (str/upper-case %1) (str/upper-case %2))
      ["B" "a" "c" "F" "r" "E"])
;=> ("a" "B" "c" "E" "F" "r")
或者,使用
排序依据

(sort-by str/upper-case ["B" "a" "c" "F" "r" "E"])
;=> ("a" "B" "c" "E" "F" "r")

compare不是一个谓词,它是一个比较器。

谢谢,我想我被比较器产生3个可能的值(-1,0,1)而谓词只能产生true或false这一事实弄糊涂了。所以,似乎你永远不会从使用(比较器)生成的东西中得到0。呃,说得太早了,(比较器)实际上也处理相等。