summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-03-04 23:20:06 +0000
committerRich Hickey <richhickey@gmail.com>2008-03-04 23:20:06 +0000
commit8888d4dfd628a2d8d552b40190014e380168d3fa (patch)
tree76ff58704eb58ff34abbcc8b4a11e91f8c0236d0
parent99d9d2da0a3363c56714a6c44844f7e90ca2601e (diff)
fixed hash-set of empty coll/nil
renamed select select-keys renamed set to ref-set renamed to-set to set, returns a set now added set.clj, set operations and 'relational' algebra
-rw-r--r--src/boot.clj24
-rw-r--r--src/jvm/clojure/lang/RT.java3
2 files changed, 12 insertions, 15 deletions
diff --git a/src/boot.clj b/src/boot.clj
index fe444297..dbcfcfa5 100644
--- a/src/boot.clj
+++ b/src/boot.clj
@@ -166,7 +166,7 @@ hash-map
(defn
#^{:doc "Returns a new hash set with supplied keys."}
hash-set
- ([] {})
+ ([] #{})
([& keys]
(. clojure.lang.PersistentHashSet (create keys))))
@@ -707,7 +707,7 @@ find [map key]
(defn
#^{:doc "Returns a map containing only those entries in map whose
key is in keys"}
-select [map keyseq]
+select-keys [map keyseq]
(loop [ret {} keys (seq keyseq)]
(if keys
(let [entry (. clojure.lang.RT (find map (first keys)))]
@@ -920,7 +920,7 @@ deref [#^clojure.lang.IRef ref]
Thus fun should be commutative, or, failing that, you must
accept last-one-in-wins behavior. commute allows for more
- concurrency than set."}
+ concurrency than ref-set."}
commute [#^clojure.lang.Ref ref fun & args]
(. ref (commute fun args)))
@@ -935,14 +935,14 @@ alter [#^clojure.lang.Ref ref fun & args]
(defn
#^{:doc "Must be called in a transaction. Sets the value of ref.
Returns val."}
-set [#^clojure.lang.Ref ref val]
+ref-set [#^clojure.lang.Ref ref val]
(. ref (set val)))
(defn
#^{:doc "Must be called in a transaction. Protects the ref from
modification by other transactions. Returns the
in-transaction-value of ref. Allows for more concurrency
- than (set ref @ref)"}
+ than (ref-set ref @ref)"}
ensure [#^clojure.lang.Ref ref]
(. ref (touch))
(. ref (get)))
@@ -1733,20 +1733,14 @@ resultset-seq [#^java.sql.ResultSet rs]
(defn
#^{:doc "Returns a map of the distinct elements of coll to true."}
-to-set [coll]
- (loop [ret {} keys (seq coll)]
- (if keys
- (recur (if (contains? ret (first keys))
- ret
- (assoc ret (first keys) true))
- (rest keys))
- ret)))
+set [coll]
+ (apply hash-set coll))
(defn
#^{:doc "Returns a sequence of the elements of coll with
duplicates removed"}
distinct [coll]
- (keys (to-set coll)))
+ (seq (set coll)))
(defn #^{:private true}
filter-key [keyfn pred amap]
@@ -1834,7 +1828,7 @@ refer [ns-sym & filters]
fs (apply hash-map filters)
nspublics (ns-publics ns)
rename (or (:rename fs) {})
- exclude (to-set (:exclude fs))
+ exclude (set (:exclude fs))
to-do (or (:only fs) (keys nspublics))]
(doseq sym to-do
(when-not (exclude sym)
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 47acdc77..defdd2d1 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -245,6 +245,9 @@ static public void init() throws Exception{
ins = RT.class.getResourceAsStream("/xml.clj");
Compiler.load(new InputStreamReader(ins));
ins.close();
+ ins = RT.class.getResourceAsStream("/set.clj");
+ Compiler.load(new InputStreamReader(ins));
+ ins.close();
}
finally
{