在clojure中等效C++的stable_partition?

djh*_*987 2 c++ clojure

在C++中,标准库中有一个函数,stable_partition它接受一个集合和一个谓词.它将集合分开,并将谓词在一个地方返回true的元素和谓词在另一个地方返回false的元素放在一起,同时保留元素的相对顺序.

我只是想知道在标准的clojure库中是否有这样的东西.尽管我寻找,但我找不到这样的功能.它可能返回两个较小集合的惰性序列,其中一个集合包含谓词返回true的那些元素,另一个集合包含谓词返回false的那些元素.

它可能看起来像这样:

(stable-partition even? [1 2 3 4 5]) -> ([1 3 5] [2 4])

noi*_*ith 5

我认为最简单的版本是:

(defn stable-partition [p? coll]
  (map (group-by p? coll) [false true]))
Run Code Online (Sandbox Code Playgroud)

既然你说

"它划分集合并将谓词在一个地方返回true的元素和谓词在另一个地方返回false的元素放在一起"

也许group-by本身就是答案(因为哈希映射中的键下的向量毕竟是位置).