diff options
author | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-01-22 16:09:27 +0000 |
---|---|---|
committer | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-01-22 16:09:27 +0000 |
commit | 2c86c70a33d540743069f8d5903f230b9de11ce5 (patch) | |
tree | 6632d64d11b15d368e6ea96c93df211d951682c1 /src/clojure/contrib/accumulators/examples.clj | |
parent | 337b0216573a46c1b2063f801032065c81676a31 (diff) |
New module accumulators.clj (with example and entry in build.xml)
Diffstat (limited to 'src/clojure/contrib/accumulators/examples.clj')
-rw-r--r-- | src/clojure/contrib/accumulators/examples.clj | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/clojure/contrib/accumulators/examples.clj b/src/clojure/contrib/accumulators/examples.clj new file mode 100644 index 00000000..3821ca88 --- /dev/null +++ b/src/clojure/contrib/accumulators/examples.clj @@ -0,0 +1,58 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Accumulator application examples +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(use 'clojure.contrib.accumulators) + +; Vector accumulator: combine is concat, add is conj +(combine [:a :b] [:c :d] [:x :y]) +(add [:a :b] :c) +(add-coll 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-coll empty-list [:a :b :a]) + +; Set accumulator: combine is union, add is conj +(combine #{:a :b} #{:c :d} #{:a :d}) +(add #{:a :b} :c) +(add-coll 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-coll empty-map [[:a 1] [:b 2] [:a 0]]) + +; Counter accumulator +(let [c1 (add-coll empty-counter [:a :b :a]) + c2 (add-coll empty-counter [:x :y])] + (combine c1 c2)) + +; Counter-with-total accumulator +(let [c1 (add-coll empty-counter-with-total [:a :b :a]) + c2 (add-coll empty-counter-with-total [:x :y])] + (combine c1 c2)) + +; Sum accumulator: combine is addition +(let [s1 (add-coll empty-sum [1 2 3]) + s2 (add-coll empty-sum [-1 -2 -3])] + (combine s1 s2)) + +; Product accumulator: combine is multiplication +(let [p1 (add-coll empty-product [2 3]) + p2 (add-coll empty-product [(/ 1 2)])] + (combine p1 p2)) + +; String accumulator: combine is concatenation +(combine "a" "b" "c" "def") +(add "a" (char 44)) +(add-coll 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-coll pair [[1 "a"] [2 "b"]])) |