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