Clojure 将函数递归地应用于每个元素
我们的想法是使用groupFirstElem函数来获得这个结果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的每个
(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))