所以我一起攻击了这个,但我相信我有很多东西要学习clojure!我已经有了正确的答案,但对我而言,这只是一个开始。通过弄清楚我应该如何思考这个问题,帮助我更好地理解lisp。我是一个传统的OO开发者...所以lisp并没有很好地进入我的脑海。
(def v [:a :a :a :b :b :c :c :c])
(def a (first(partition-by identity v)))
(def b (flatten(rest (partition-by identity v))))
(vec(conj (list b) a))
获取上面已编码但未使用Frankenstein语法的结果的想法。我希望你能帮助我。 我的代码的结果是: [(:a:a:a)(:b:b:c:c:c)]
答案 0 :(得分:2)
这个功能怎么样?
(defn my-group [[x & _ :as xs]]
(split-with (partial = x) xs))
让我们试试这个功能:
user> (my-group [:a :a :a :b :b :c :c :c])
;; => [(:a :a :a) (:b :b :c :c :c)]
user> (my-group ["foo" "foo" "bar" "bar" "bar" "baz" "foo"])
;; => [("foo" "foo") ("bar" "bar" "bar" "baz" "foo")]
答案 1 :(得分:1)
我的理解是你想要这样的东西:
(let [[a & r] (partition-by identity v)]
[a (apply concat r)])