Jef*_*son 8 list sorted clojure
我怎么能在Clojure中验证是否对数字列表进行了排序?
(def my-list (list 1 2 3 1 4 2 2 4))
Run Code Online (Sandbox Code Playgroud)
sorted?仅当集合实现sorted接口时才返回true .我正在寻找一种reduce可以成对迭代列表的操作,例如(reduce < my-list).我知道我可以手动创建对并比较这些:
(letfn [(pair [l] (if (= (count l) 2) (list l) (cons (take 2 l) (pair (rest l)))))]
(every? #(apply < %) (pair my-list)))
Run Code Online (Sandbox Code Playgroud)
但这似乎不必要地复杂.在我看来,好像我错过了一个基本功能.
noi*_*ith 22
最简单的解决方案:
(apply <= mylist)
>= 也适用于反向排序
我会对重叠的数字对进行一次传递并检查它们<=(如您所提到的),因为它是 O(n),尽管您不需要手动配对。
user> (partition-all 2 1 [1 2 3 4 5 6])
((1 2) (2 3) (3 4) (4 5) (5 6) (6))
user> (every? #(apply <= %) (partition-all 2 1 [1 2 3 4 6 5]))
false
user> (every? #(apply <= %) (partition-all 2 1 [1 2 3 4 5 6]))
true
Run Code Online (Sandbox Code Playgroud)