在一个完成谓词的序列中,在两个项目之间插入项目?

jho*_*rth 5 functional-programming clojure

假设我有一个带有两个项目的谓词并返回true为false.我想在序列中的每个连续对之间插入一个项,该谓词返回true.我想出了几个解决方案,但我想知道在Clojure中以功能方式执行它的惯用方法是什么?

man*_*nge 3

这是我的尝试:

(defn interpose-predicated [pred in coll]
  (if (next coll)
    (->> coll
         (partition 2 1)
         (mapcat (comp next #(if (apply pred %) (interpose in %) %)))
         (cons (first coll)))
    coll))
Run Code Online (Sandbox Code Playgroud)