aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/accumulators/examples.clj
diff options
context:
space:
mode:
authorKonrad Hinsen <konrad.hinsen@laposte.net>2009-01-22 16:09:27 +0000
committerKonrad Hinsen <konrad.hinsen@laposte.net>2009-01-22 16:09:27 +0000
commit2c86c70a33d540743069f8d5903f230b9de11ce5 (patch)
tree6632d64d11b15d368e6ea96c93df211d951682c1 /src/clojure/contrib/accumulators/examples.clj
parent337b0216573a46c1b2063f801032065c81676a31 (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.clj58
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"]]))