2014-05-02 15 views
5

W odpowiedzi na to question odpowiadającego wykorzystuje funkcję reducedCo robi „” obniżonej funkcji i jak z niego korzystać

(defn state [t] 
    (reduce (fn [[s1 t1] [s2 t2]] 
      (if (>= t1 t) (**reduced** s1) [s2 (+ t1 t2)])) 
      (thomsons-lamp))) 

Spojrzałem na dok i źródła i nie można go całkowicie Grok.

(defn reduced 
    "Wraps x in a way such that a reduce will terminate with the value x" 
    {:added "1.5"} 
    [x] 
    (clojure.lang.Reduced. x)) 

W powyższym przykładzie myślę (reduced s1) ma zakończyć redukcję i powrotu S1.

Czy używasz zredukować + zredukowany ekwiwalent hipotetycznego zmniejszania lub zmniejszania-aż do funkcji, jeśli takie istnienie istniało?

+0

źródłem 'reduced' nie powiedzieć, dużo - musisz przyjrzeć się źródłu 'redu ', aby naprawdę wiedzieć, co się dzieje. – Alex

+0

Nawet źródło "redukuj" wywołuje niektóre metody implementacji. – noisesmith

Odpowiedz

5

Zredukowano sposób na przełamanie zmniejszania o podaną wartość.

Na przykład, aby dodać numery w sekwencji

(reduce (fn [acc x] (+ acc x)) (range 10)) 

powraca 45

(reduce (fn [acc x] (if (> acc 20) (reduced "I have seen enough") (+ acc x))) (range 10)) 

powroty "Widziałem wystarczająco"

Powiązane problemy