Clojure:连续重复项目的数量

Clojure:连续重复项目的数量,clojure,Clojure,我需要一个函数来计算序列中连续相等项的数量。例如,(连续的“abcdefg”)应该返回0,而(连续的“aabcdddefg”)应该返回3 我写它的方式是惯用的还是可以改进的 (defn consecutive [p] (second (reduce #(vector %2 (if (= (first %1) %2) (inc (second %1))

我需要一个函数来计算序列中连续相等项的数量。例如,(连续的“abcdefg”)应该返回0,而(连续的“aabcdddefg”)应该返回3

我写它的方式是惯用的还是可以改进的

(defn consecutive [p]
  (second (reduce
            #(vector %2
                     (if (= (first %1) %2)
                       (inc (second %1))
                       (second %1)))
            [nil 0]
            p)))
当需要一些连续的序列时,我更喜欢
(按标识划分)
习惯用法。

试试这个

(defn consecutive [string]
  (let [n (apply max (map count (partition-by identity string)))]
    (if (= n 1) 0 n)))
这是常见的模式

我认为
(连续的“abcdefg”)
应该返回1,而不是0

下面是一个简单的实现:

(defn consecutive [s] 
  (apply max (map count (partition-by identity s))))

为什么
(连续的“abcdefg”)
应该返回1?你能详细说明一下吗?因为最长的连续字符序列是长度1(单个字符)。在这种情况下,强制结果为零在逻辑上似乎是不一致的。我认为只有空字符串才是连续字符为零的情况。
(defn consecutive [s] 
  (apply max (map count (partition-by identity s))))