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,我们的想法是使用groupFirstElem函数来获得这个结果 (def v [:1 :1 :1 :2 :2 :2 :3 :3]) (defn groupFirstElem [[vec & more :as myList]] (split-with (partial = vec) myList) ) ;the (groupFirstElem v) yields [(:1 :1 :1) (:2 :2 :2 :3 :3)] 如何递归调用groupFirstElem,使其应用于v的每个

我们的想法是使用groupFirstElem函数来获得这个结果

(def v [:1 :1 :1  :2 :2 :2 :3 :3])
(defn groupFirstElem [[vec & more :as myList]]
  (split-with (partial = vec) myList)
)
;the (groupFirstElem v) yields [(:1 :1 :1) (:2 :2 :2 :3 :3)]

如何递归调用groupFirstElem,使其应用于v的每个“组”,而不必对第一个元素求值两次

首先,您的具体问题可以通过以下方式解决:

[(:1 :1 :1) (:2 :2 :2) (:3 :3)]
回到你的问题上来;以下内容将重复使用功能的(拼接)结果替换sq的最后一个元素:

(partition-by identity [:1 :1 :1 :2 :2 :2 :3 :3])
;; => ((:1 :1 :1) (:2 :2 :2) (:3 :3))
一个小警告,你必须这样称呼它:

(defn iterate-last
  [f sq]
  (loop [sq sq]
    (if (empty? (last sq))
      (butlast sq)
      (recur (concat (butlast sq) (f (last sq)))))))

谢谢我有这个类似的想法但力空知道吗?还是最后一次,还是最后一次大笑
(iterate-last groupFirstElem [v])
;; => ((:1 :1 :1) (:2 :2 :2) (:3 :3))