应用功能递归每个元素
问题描述:
(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函数来获取这个应用功能递归每个元素
[(:1 :1 :1) (:2 :2 :2) (:3 :3)]
我如何去recursevely调用groupFirstElem,使之适用于每个V的“团体”无必须评估第一个元素两次。
答
首先,您的具体问题可以通过解决:
(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))
谢谢,我有这是一个类似的想法,但力量知道空吗?或最后一次,或最后一次 – hidden 2014-09-24 21:03:35