2013-11-20 3 views
3

벡터를 취하여 요소 쌍에 테스트를 적용하는 함수를 작성하고 싶습니다. 테스트의 요소가 동일한 것으로 간주하고 요소가없는 벡터를 출력합니다.벡터에 대한 Clojure 패턴 매칭

내 생각은 벡터를 가져 와서 평평하게하는 것입니다.

(defn soup [& x] 
    (vec (flatten x)) 

다음과 같은 테스트를 적용 하시겠습니까? neg? 또는 그 라인을 따라 무엇인가. 패턴 매칭 시점에서 출력물을 조립하려고 노력 중입니다.

예) 1 입력 : [A : B : C : A : B : C]

출력 1 : [A : A] [: B : B] [C : C] ]

입력 2 : [A : B : C] [A : B : C]

출력 2 : [A : B : C] [A : B : C 제 2 입력은 평탄화 된 경우]]

, 그것을 출력 1.

+0

안녕 @ 알렉스, 당신은 출력 예제를 제공 할 수 있습니까? – tangrammer

+0

평평하게하는 것은 거의 원하는 것이 아닙니다. (수프 : a : b : c), (수프 [: a] [: b : c]), (수프 [: a : b] : c) 및 (수프 [[: a : b : c]] ])는 모두 해당 정의를 기반으로 동일한 결과를 반환합니다. – noisesmith

답변

4

겠습니까 결합 정렬 다시주고 파티션별로 가까이 당신이 요구하는 것에?

(->> [:a :b :c :a :b :c] sort (partition-by identity)) 
((:a :a) (:b :b) (:c :c)) 

(->> [[:a :b :c] [:a :b :c]] sort (partition-by identity)) 
(([:a :b :c] [:a :b :c])) 

당신이 후 벡터로 필요할 경우 :

(->> [:a :b :c :a :b :c] sort (partition-by identity) (map vec) vec) 
[[:a :a] [:b :b] [:c :c]] 

(->> [[:a :b :c] [:a :b :c]] sort (partition-by identity) (map vec) vec) 
[[[:a :b :c] [:a :b :c]]] 
+0

[: a : a : b : b : b : c : c : c : a : a]와 같은 벡터를 가져 와서 [ [: a : a] [: b : b : b] [: c : c : c] [: a : a]를 입력하십시오. 따라서 입력의 동일한 요소가 실행되면 벡터로 출력됩니다. – sunspots

+0

그냥 정렬 호출을 제거하십시오. –