Mercurial > lasercutter
view src/clojure/contrib/test_contrib/accumulators/examples.clj @ 10:ef7dbbd6452c
added clojure source goodness
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 21 Aug 2010 06:25:44 -0400 |
parents | |
children |
line wrap: on
line source
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3 ;;4 ;; Accumulator application examples5 ;;6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9 (ns10 #^{:author "Konrad Hinsen"11 :skip-wiki true12 :doc "Examples for using accumulators"}13 clojure.contrib.accumulators.examples14 (:use [clojure.contrib.accumulators15 :only (combine add add-items16 empty-vector empty-list empty-queue empty-set empty-map17 empty-counter empty-counter-with-total18 empty-sum empty-product empty-maximum empty-minimum19 empty-min-max empty-mean-variance empty-string empty-tuple)]))21 ; Vector accumulator: combine is concat, add is conj22 (combine [:a :b] [:c :d] [:x :y])23 (add [:a :b] :c)24 (add-items empty-vector [:a :b :a])26 ; List accumulator: combine is concat, add is conj27 (combine '(:a :b) '(:c :d) '(:x :y))28 (add '(:a :b) :c)29 (add-items empty-list [:a :b :a])31 ; Queue accumulator32 (let [q1 (add-items empty-queue [:a :b :a])33 q2 (add-items empty-queue [:x :y])]34 (combine q1 q2))36 ; Set accumulator: combine is union, add is conj37 (combine #{:a :b} #{:c :d} #{:a :d})38 (add #{:a :b} :c)39 (add-items empty-set [:a :b :a])41 ; Map accumulator: combine is merge, add is conj42 (combine {:a 1} {:b 2 :c 3} {})43 (add {:a 1} [:b 2])44 (add-items empty-map [[:a 1] [:b 2] [:a 0]])46 ; Counter accumulator47 (let [c1 (add-items empty-counter [:a :b :a])48 c2 (add-items empty-counter [:x :y])]49 (combine c1 c2))51 ; Counter-with-total accumulator52 (let [c1 (add-items empty-counter-with-total [:a :b :a])53 c2 (add-items empty-counter-with-total [:x :y])]54 (combine c1 c2))56 ; Sum accumulator: combine is addition57 (let [s1 (add-items empty-sum [1 2 3])58 s2 (add-items empty-sum [-1 -2 -3])]59 (combine s1 s2))61 ; Product accumulator: combine is multiplication62 (let [p1 (add-items empty-product [2 3])63 p2 (add-items empty-product [(/ 1 2)])]64 (combine p1 p2))66 ; Maximum accumulator: combine is max67 (let [m1 (add-items empty-maximum [2 3])68 m2 (add-items empty-maximum [(/ 1 2)])]69 (combine m1 m2))71 ; Minimum accumulator: combine is min72 (let [m1 (add-items empty-minimum [2 3])73 m2 (add-items empty-minimum [(/ 1 2)])]74 (combine m1 m2))76 ; Min-max accumulator: combination of minimum and maximum77 (let [m1 (add-items empty-min-max [2 3])78 m2 (add-items empty-min-max [(/ 1 2)])]79 (combine m1 m2))81 ; Mean-variance accumulator: sample mean and sample variance82 (let [m1 (add-items empty-mean-variance [2 4])83 m2 (add-items empty-mean-variance [6])]84 (combine m1 m2))86 ; String accumulator: combine is concatenation87 (combine "a" "b" "c" "def")88 (add "a" (char 44))89 (add-items empty-string [(char 55) (char 56) (char 57)])91 ; Accumulator tuples permit to update several accumulators in parallel92 (let [pair (empty-tuple [empty-vector empty-string])]93 (add-items pair [[1 "a"] [2 "b"]]))