2013-02-28 4 views
4

나는 부분 집합의 순열 생성하는 기능을 찾고, Clojure의 새로운 해요 : clojure : 부분 집합의 순열?

=> (find-subsets 1 #{1 2 3 4}) 
(#{1} #{2} #{3} #{4}) 

=> (find-subsets 2 #{1 2 3 4}) 
(#{1 2} #{1 3} #{1 4} #{2 3} #{2 4} #{3 4}) 

=> (find-subsets 3 #{1 2 3 4}) 
(#{1 2 3} #{1 3 4} #{2 3 4}) 

그런 일이 존재 하는가를? 그렇지 않다면 함수를 코드화하는 멋지고 깨끗한 관용적 방법이 있습니까?

+0

가능한 복제본 [중복없이 반복적으로 시퀀스 결합] (http://stackoverflow.com/questions/15123069/combine-sequence-with-itself-recursively-without-duplicates) – amalloy

답변

10

combinatorics을 살펴보십시오.

; all the unique ways of taking n different elements from items 
(clojure.math.combinatorics/combinations [1 2 3] 2) 
;;=> ((1 2) (1 3) (2 3)) 

을 그냥 combinations를 호출하기 전에 VEC 벡터로 변환하는 대신 벡터 세트 사용하기 때문에이 불평하는 경우 : 그것은 당신이 필요하지 않습니다.

관련 문제