在C++中,标准库中有一个函数,stable_partition它接受一个集合和一个谓词.它将集合分开,并将谓词在一个地方返回true的元素和谓词在另一个地方返回false的元素放在一起,同时保留元素的相对顺序.
我只是想知道在标准的clojure库中是否有这样的东西.尽管我寻找,但我找不到这样的功能.它可能返回两个较小集合的惰性序列,其中一个集合包含谓词返回true的那些元素,另一个集合包含谓词返回false的那些元素.
它可能看起来像这样:
(stable-partition even? [1 2 3 4 5]) -> ([1 3 5] [2 4])
我认为最简单的版本是:
(defn stable-partition [p? coll]
(map (group-by p? coll) [false true]))
Run Code Online (Sandbox Code Playgroud)
既然你说
"它划分集合并将谓词在一个地方返回true的元素和谓词在另一个地方返回false的元素放在一起"
也许group-by本身就是答案(因为哈希映射中的键下的向量毕竟是位置).