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 LazySeq不能按排序方式转换为Compariable_Clojure - Fatal编程技术网

Clojure LazySeq不能按排序方式转换为Compariable

Clojure LazySeq不能按排序方式转换为Compariable,clojure,Clojure,clojure 1.9.0 下面是对字符数组进行排序的简单测试 user=> (sort-by identity [[\B] [\a]]) ([\B] [\a]) 但是为什么另一个测试不敏感地按大小写排序 user=> (sort-by (partial map #(Character/toLowerCase %)) [[\B] [\a]]) java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to

clojure 1.9.0

下面是对字符数组进行
排序的简单测试

user=> (sort-by identity [[\B] [\a]])
([\B] [\a])
但是为什么另一个测试不敏感地按
大小写排序

user=> (sort-by (partial map #(Character/toLowerCase %)) [[\B] [\a]])

java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Comparable
解决方案

使用而不是制造它

user=> (instance? clojure.lang.LazySeq (map identity []))
true
user=> (instance? clojure.lang.PersistentVector (mapv identity (map identity [])))
true
您不需要地图:

(ns tst.demo.core
  (:require
    [clojure.string :as str] ))

(sort-by  #(.toLowerCase  (str/join %)) [[\a \b] [\B] [\a]])
;=> ([\a] [\a \b] [\B])
但为什么另一个测试没有按案例进行无意识排序呢

user=> (sort-by (partial map #(Character/toLowerCase %)) [[\B] [\a]])

java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Comparable
map
返回一个惰性序列,该序列不实现
compariable
mapv
之所以有效,是因为向量支持
可比性
,这就是要排序的内容