2012-07-20 2 views
9

시간을 단축하여 처리해야 할 때마다 (축소와 같은) 어떤 종류의 결과가 누적 될 때마다 확장 된 종류가 필요할 때가 있습니다. 시퀀스의 이전 항목 (축소와 달리).Clojure : 세 가지 매개 변수로 줄이기

예를 들어 (바보 같은) 현재 항목과 이전 항목이 모두 짝수 일 경우 누산기에 1을 더하고 그 중 하나가 홀수 인 경우 누적 값에 1을 더하십시오. 이것은 단지 어리석은 사례이지만, 나는 이런 종류의 문제에 자주 빠졌습니다. 저는 일반적으로 벡터를 누적기로 만듭니다. 첫 번째 항목은 실제 집계이고 두 번째 항목은 이전 항목입니다. 매우 우아하고 장황하지는 않습니다.

이러한 경우에 도움이되는 핵심 기능이 있습니까? 그런 문제를 다루는 가장 관용적 인 방법은 무엇입니까? 감사합니다

+0

다음과 같이 작성하십시오. 입력 : xxx 출력 : yyy – blueiur

답변

15

partition 구조에.

(reduce (fn [i [a b]] 
      (cond 
      (and (even? a) (even? b)) (inc i) 
      (and (odd? a) (odd? b)) (dec i) 
      :else i)) 
     0 (partition 2 1 input)) 

또는 좀 더 간결 :이 특정 문제에 대한

(reduce (fn [i pair] 
      (condp every? pair 
      even? (inc i) 
      odd? (dec i) 
      i)) 
     0 (partition 2 1 input)) 
+2

"상태"는 Clojure에서 단 하나의 파티션입니다. – ponzao

10

는, 내가 이전의 요소를 추적하기 위해 파티션을 사용하여,의 솔루션을 kotarak 것이 좋습니다. 그러나 일반적인 상황에서 축소의 최종 "응답"외에도 일부 상태를 관리해야하는 경우에는 쌍 또는지도 등을 줄이고 결국 누적 기 값을 가져올 수 있습니다. 예 :

관련 문제