blob: b9dcbee50c005118aacd5d94a90a1c567022cfb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Accumulator application examples
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(ns
#^{:author "Konrad Hinsen"
:skip-wiki true
:doc "Examples for using accumulators"}
clojure.contrib.accumulators.examples
(:use [clojure.contrib.accumulators
:only (combine add add-items
empty-vector empty-list empty-queue empty-set empty-map
empty-counter empty-counter-with-total
empty-sum empty-product empty-maximum empty-minimum
empty-min-max empty-mean-variance empty-string empty-tuple)]))
; Vector accumulator: combine is concat, add is conj
(combine [:a :b] [:c :d] [:x :y])
(add [:a :b] :c)
(add-items empty-vector [:a :b :a])
; List accumulator: combine is concat, add is conj
(combine '(:a :b) '(:c :d) '(:x :y))
(add '(:a :b) :c)
(add-items empty-list [:a :b :a])
; Queue accumulator
(let [q1 (add-items empty-queue [:a :b :a])
q2 (add-items empty-queue [:x :y])]
(combine q1 q2))
; Set accumulator: combine is union, add is conj
(combine #{:a :b} #{:c :d} #{:a :d})
(add #{:a :b} :c)
(add-items empty-set [:a :b :a])
; Map accumulator: combine is merge, add is conj
(combine {:a 1} {:b 2 :c 3} {})
(add {:a 1} [:b 2])
(add-items empty-map [[:a 1] [:b 2] [:a 0]])
; Counter accumulator
(let [c1 (add-items empty-counter [:a :b :a])
c2 (add-items empty-counter [:x :y])]
(combine c1 c2))
; Counter-with-total accumulator
(let [c1 (add-items empty-counter-with-total [:a :b :a])
c2 (add-items empty-counter-with-total [:x :y])]
(combine c1 c2))
; Sum accumulator: combine is addition
(let [s1 (add-items empty-sum [1 2 3])
s2 (add-items empty-sum [-1 -2 -3])]
(combine s1 s2))
; Product accumulator: combine is multiplication
(let [p1 (add-items empty-product [2 3])
p2 (add-items empty-product [(/ 1 2)])]
(combine p1 p2))
; Maximum accumulator: combine is max
(let [m1 (add-items empty-maximum [2 3])
m2 (add-items empty-maximum [(/ 1 2)])]
(combine m1 m2))
; Minimum accumulator: combine is min
(let [m1 (add-items empty-minimum [2 3])
m2 (add-items empty-minimum [(/ 1 2)])]
(combine m1 m2))
; Min-max accumulator: combination of minimum and maximum
(let [m1 (add-items empty-min-max [2 3])
m2 (add-items empty-min-max [(/ 1 2)])]
(combine m1 m2))
; Mean-variance accumulator: sample mean and sample variance
(let [m1 (add-items empty-mean-variance [2 4])
m2 (add-items empty-mean-variance [6])]
(combine m1 m2))
; String accumulator: combine is concatenation
(combine "a" "b" "c" "def")
(add "a" (char 44))
(add-items empty-string [(char 55) (char 56) (char 57)])
; Accumulator tuples permit to update several accumulators in parallel
(let [pair (empty-tuple [empty-vector empty-string])]
(add-items pair [[1 "a"] [2 "b"]]))
|