Skip to content
Newer
Older
100644 117 lines (98 sloc) 2.83 KB
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
1 ;; Generic interfaces for collection-related functions
2
3 ;; by Konrad Hinsen
1dd60bd generic: documentation update
Konrad Hinsen authored
4 ;; last updated May 5, 2009
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
5
6 ;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use
7 ;; and distribution terms for this software are covered by the Eclipse
8 ;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
9 ;; which can be found in the file epl-v10.html at the root of this
10 ;; distribution. By using this software in any fashion, you are
11 ;; agreeing to be bound by the terms of this license. You must not
12 ;; remove this notice, or any other, from this software.
13
bdc813a Namespace documentation for autodoc
Konrad Hinsen authored
14 (ns
15 #^{:author "Konrad Hinsen"
16 :doc "Generic arithmetic interface
17 This library defines generic versions of common
18 collection-related functions as multimethods that can be
19 defined for any type."}
20 clojure.contrib.generic.collection
334ad56 generic: new module functor
Konrad Hinsen authored
21 (:refer-clojure :exclude [assoc conj dissoc empty get into seq]))
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
22
23 ;
24 ; assoc
25 ;
26 (defmulti assoc
27 "Returns a new collection in which the values corresponding to the
28 given keys are updated by the given values. Each type of collection
29 can have specific restrictions on the possible keys."
30 {:arglists '([coll & key-val-pairs])}
31 (fn [coll & items] (type coll)))
32
33 (defmethod assoc :default
34 [map & key-val-pairs]
35 (apply clojure.core/assoc map key-val-pairs))
36
37 ; assoc-in
38
39 ;
40 ; conj
41 ;
1dd60bd generic: documentation update
Konrad Hinsen authored
42 (defmulti conj
43 "Returns a new collection resulting from adding all xs to coll."
637ce54 Documentation updates
Konrad Hinsen authored
44 {:arglists '([coll & xs])}
1dd60bd generic: documentation update
Konrad Hinsen authored
45 (fn [coll & xs] (type coll)))
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
46
47 (defmethod conj :default
48 [coll & xs]
49 (apply clojure.core/conj coll xs))
50
51 ;
52 ; diassoc
53 ;
54 (defmulti dissoc
55 "Returns a new collection in which the entries corresponding to the
56 given keys are removed. Each type of collection can have specific
57 restrictions on the possible keys."
58 {:arglists '([coll & keys])}
59 (fn [coll & keys] (type coll)))
60
61 (defmethod dissoc :default
62 [map & keys]
63 (apply clojure.core/dissoc map keys))
64
65 ;
66 ; empty
67 ;
68 (defmulti empty
69 "Returns an empty collection of the same kind as the argument"
70 {:arglists '([coll])}
71 type)
72
73 (defmethod empty :default
74 [coll]
75 (clojure.core/empty coll))
76
77 ;
78 ; get
79 ;
80 (defmulti get
81 "Returns the element of coll referred to by key. Each type of collection
82 can have specific restrictions on the possible keys."
83 {:arglists '([coll key] [coll key not-found])}
84 (fn [coll & args] (type coll)))
85
86 (defmethod get :default
87 ([coll key]
88 (clojure.core/get coll key))
89 ([coll key not-found]
90 (clojure.core/get coll key not-found)))
91
92 ;
93 ; into
94 ;
334ad56 generic: new module functor
Konrad Hinsen authored
95 (defmulti into
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
96 "Returns a new coll consisting of to-coll with all of the items of
97 from-coll conjoined."
334ad56 generic: new module functor
Konrad Hinsen authored
98 {:arglists '([to from])}
99 (fn [to from] (type to)))
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
100
334ad56 generic: new module functor
Konrad Hinsen authored
101 (declare seq)
102 (defmethod into :default
103 [to from]
104 (reduce conj to (seq from)))
33473a7 new module clojure.contrib.generic.collection
Konrad Hinsen authored
105
106 ;
107 ; seq
108 ;
109 (defmulti seq
110 "Returns a seq on the object s."
111 {:arglists '([s])}
112 type)
113
114 (defmethod seq :default
115 [s]
116 (clojure.core/seq s))
Something went wrong with that request. Please try again.