在clojure中等效C ++的stable_partition?

时间:2016-02-06 17:34:41

标签: c++ clojure

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

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

可能看起来像这样:

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

1 个答案:

答案 0 :(得分:5)

我认为最简单的版本是:

(defn stable-partition [p? coll]
  (map (group-by p? coll) [false true]))

既然你说

  

“它划分集合并放置那些元素   谓词在一个地方返回true,而那些元素为   谓词在另一个地方返回false“

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