clojure中按身份划分重复数据如何消除集合?

clojure中按身份划分重复数据如何消除集合?,clojure,Clojure,矢量中的以下clojure代码重复数据消除元素: user> (partition-by identity [1 2 2 3 3 3 4 2 2 1 1 1]) ((1) (2 2) (3 3 3) (4) (2 2) (1 1 1)) 它是如何完成重复数据消除的 我如何一步一步地看到生成的集合是如何构建的 如果您还没有看到它,请务必将其添加到书签中 单击具有良好信息和示例的partitionby 单击右上角以查看。查看第二个算术运算,它采用函数f和集合coll: ([f coll]

矢量中的以下clojure代码重复数据消除元素:

user> (partition-by identity [1 2 2 3 3 3 4 2 2 1 1 1])
((1) (2 2) (3 3 3) (4) (2 2) (1 1 1))
  • 它是如何完成重复数据消除的
  • 我如何一步一步地看到生成的集合是如何构建的

  • 如果您还没有看到它,请务必将其添加到书签中

    单击具有良好信息和示例的
    partitionby

    单击右上角以查看。查看第二个算术运算,它采用函数
    f
    和集合
    coll

     ([f coll]
         (lazy-seq
          (when-let [s (seq coll)]
            (let [fst (first s)
                  fv (f fst)
                  run (cons fst (take-while #(= fv (f %)) (next s)))]
              (cons run (partition-by f (seq (drop (count run) s))))))))
    

    因此,
    fst
    是集合中的第一项,
    fv
    是使用函数
    f
    转换的值。然后,它将使用所有与
    fv
    匹配的项,此时它将与第一个不匹配的项一起递归。

    分区不会消除任何重复数据,它只是根据
    f
    为序列中的每个值返回的值将序列拆分为子序列。