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,我正在寻找一种方法来检查集合中的当前值是否大于下一个值,如果大于,则将该对项添加到集合中,例如: [9 2 3 7 11 8 3 7 1] => [9 2 11 8 8 3 7 1] ; Checking each item against the next 我最初认为我可以做如下事情: (filter (fn [[x y]] (> x y)) [9 2 3 7 11 8 3 7 1]) 但类似的东西似乎只适用于关联类型。然后我尝试了这样的方法: (defn get-next

我正在寻找一种方法来检查集合中的当前值是否大于下一个值,如果大于,则将该对项添加到集合中,例如:

[9 2 3 7 11 8 3 7 1] => [9 2 11 8 8 3 7 1] ; Checking each item against the next
我最初认为我可以做如下事情:

(filter (fn [[x y]] (> x y)) [9 2 3 7 11 8 3 7 1]) 
但类似的东西似乎只适用于关联类型。然后我尝试了这样的方法:

(defn get-next [col index] ; Returns next item from a collection
  (get col (inc (.indexOf col index))))

(filter (fn [[x]] (> x (get-next [9 2 3 7 11 8 3 7 1] x))) [9 2 3 7 11 8 3 7 1]) 

但我还是犯了同样的错误。任何帮助都将不胜感激

使用
分区
函数将集合中的当前项和下一项配对

user=> (partition 2 1 [9 2 3 7 11 8 3 7 1])
((9 2) (2 3) (3 7) (7 11) (11 8) (8 3) (3 7) (7 1))
现在,集合中有一对当前项和下一项。您可以比较每对中的项目,并使用
mapcat
计算结果

user=> (->> [9 2 3 7 11 8 3 7 1]
  #_=>      (partition 2 1)
  #_=>      (mapcat (fn [[a b]] (if (> a b) [a b]))))
(9 2 11 8 8 3 7 1)

使用
partition
函数将集合中的当前项和下一项配对

user=> (partition 2 1 [9 2 3 7 11 8 3 7 1])
((9 2) (2 3) (3 7) (7 11) (11 8) (8 3) (3 7) (7 1))
现在,集合中有一对当前项和下一项。您可以比较每对中的项目,并使用
mapcat
计算结果

user=> (->> [9 2 3 7 11 8 3 7 1]
  #_=>      (partition 2 1)
  #_=>      (mapcat (fn [[a b]] (if (> a b) [a b]))))
(9 2 11 8 8 3 7 1)

使用
partition
函数将集合中的当前项和下一项配对

user=> (partition 2 1 [9 2 3 7 11 8 3 7 1])
((9 2) (2 3) (3 7) (7 11) (11 8) (8 3) (3 7) (7 1))
现在,集合中有一对当前项和下一项。您可以比较每对中的项目,并使用
mapcat
计算结果

user=> (->> [9 2 3 7 11 8 3 7 1]
  #_=>      (partition 2 1)
  #_=>      (mapcat (fn [[a b]] (if (> a b) [a b]))))
(9 2 11 8 8 3 7 1)

使用
partition
函数将集合中的当前项和下一项配对

user=> (partition 2 1 [9 2 3 7 11 8 3 7 1])
((9 2) (2 3) (3 7) (7 11) (11 8) (8 3) (3 7) (7 1))
现在,集合中有一对当前项和下一项。您可以比较每对中的项目,并使用
mapcat
计算结果

user=> (->> [9 2 3 7 11 8 3 7 1]
  #_=>      (partition 2 1)
  #_=>      (mapcat (fn [[a b]] (if (> a b) [a b]))))
(9 2 11 8 8 3 7 1)

另一种方法是使用
reduce

(defn pairs [data]
  ((reduce (fn [res item]
             (if (and (:prev res) (< item (:prev res)))
               (assoc res
                      :prev item
                      :res (conj (:res res) (:prev res) item))
               (assoc res :prev item)))
           {:prev nil :res []} data) :res))

(pairs [9 2 3 7 11 8 3 7 1])
;; [9 2 11 8 8 3 7 1]
(defn对[数据]
((减少(fn【资源项目】
(如果(和(:prev res)(<项目(:prev res)))
(助理秘书)
:上一项
:res(conj(:res res)(:prev res)item))
(助理秘书:上一个项目)
{:prev-nil:res[]}数据:res)
(成对[92371118371])
;; [9 2 11 8 8 3 7 1]

另一种方法是使用
reduce

(defn pairs [data]
  ((reduce (fn [res item]
             (if (and (:prev res) (< item (:prev res)))
               (assoc res
                      :prev item
                      :res (conj (:res res) (:prev res) item))
               (assoc res :prev item)))
           {:prev nil :res []} data) :res))

(pairs [9 2 3 7 11 8 3 7 1])
;; [9 2 11 8 8 3 7 1]
(defn对[数据]
((减少(fn【资源项目】
(如果(和(:prev res)(<项目(:prev res)))
(助理秘书)
:上一项
:res(conj(:res res)(:prev res)item))
(助理秘书:上一个项目)
{:prev-nil:res[]}数据:res)
(成对[92371118371])
;; [9 2 11 8 8 3 7 1]

另一种方法是使用
reduce

(defn pairs [data]
  ((reduce (fn [res item]
             (if (and (:prev res) (< item (:prev res)))
               (assoc res
                      :prev item
                      :res (conj (:res res) (:prev res) item))
               (assoc res :prev item)))
           {:prev nil :res []} data) :res))

(pairs [9 2 3 7 11 8 3 7 1])
;; [9 2 11 8 8 3 7 1]
(defn对[数据]
((减少(fn【资源项目】
(如果(和(:prev res)(<项目(:prev res)))
(助理秘书)
:上一项
:res(conj(:res res)(:prev res)item))
(助理秘书:上一个项目)
{:prev-nil:res[]}数据:res)
(成对[92371118371])
;; [9 2 11 8 8 3 7 1]

另一种方法是使用
reduce

(defn pairs [data]
  ((reduce (fn [res item]
             (if (and (:prev res) (< item (:prev res)))
               (assoc res
                      :prev item
                      :res (conj (:res res) (:prev res) item))
               (assoc res :prev item)))
           {:prev nil :res []} data) :res))

(pairs [9 2 3 7 11 8 3 7 1])
;; [9 2 11 8 8 3 7 1]
(defn对[数据]
((减少(fn【资源项目】
(如果(和(:prev res)(<项目(:prev res)))
(助理秘书)
:上一项
:res(conj(:res res)(:prev res)item))
(助理秘书:上一个项目)
{:prev-nil:res[]}数据:res)
(成对[92371118371])
;; [9 2 11 8 8 3 7 1]

1<代码>休息2。3.4.利润!!!!111查找分区并按1分区<代码>休息2。3.4.利润!!!!111查找分区并按1分区<代码>休息2。3.4.利润!!!!111查找分区并按1分区<代码>休息2。3.4.利润!!!!111查找分区和按分区