replaces some loop/recurs with more conciser idiomatic clojure

This commit is contained in:
Ben Mabey 2010-11-24 12:05:30 -07:00
parent 88d65f0e24
commit 1f3900a628
3 changed files with 14 additions and 27 deletions

View file

@ -245,7 +245,7 @@
(defn instance-value-at
"Returns the value of an instance attribute"
[instance pos]
[^Instance instance pos]
(let [attr (.attribute instance pos)]
(if (.isNominal attr)
(let [val (.value instance pos)
@ -260,26 +260,16 @@
(defn instance-to-vector
"Builds a vector with the values of the instance"
[instance]
(let [max (.numValues instance)]
(loop [c 0
acum []]
(if (= c max)
acum
(recur (+ c 1)
(conj acum (instance-value-at instance c)))))))
[^Instance instance]
(vec (map (partial instance-value-at instance) (range (.numValues instance)))))
(defn instance-to-map
"Builds a vector with the values of the instance"
[instance]
(let [max (.numValues instance)]
(loop [c 0
acum {}]
(if (= c max)
acum
(recur (+ c 1)
(conj acum {(keyword (. (.attribute instance c) name))
(instance-value-at instance c)} ))))))
[^Instance instance]
(reduce (fn [m i]
(assoc m (keyword (attribute-name-at instance i)) (instance-value-at instance i)))
{}
(range (.numValues instance))))
;; manipulation of datasets

View file

@ -100,14 +100,11 @@
(is (sequential? seq))))
(deftest working-sequences
(deftest working-sequences-and-helpers
(let [ds (make-dataset "test" [:a :b {:c [:d :e]}] [{:a 1 :b 2 :c :d} [4 5 :e]])]
(is (= 2 (dataset-count ds)))
(let [dsm (map #(instance-to-map %1) (dataset-seq ds))]
(is (= 2 (count dsm)))
(is (= 1.0 (:a (first dsm))))
(let [dsb (make-dataset "test" [:a :b {:c [:d :e]}] dsm)]
(is (= 2 (dataset-count dsb)))))))
(is (= [{:a 1 :b 2 :c :d} {:a 4 :b 5 :c :e}] (dataset-as-maps ds)))
(is (= [{:a 1 :b 2 :c :d} {:a 4 :b 5 :c :e}] (map #(instance-to-map %1) (dataset-seq ds))))))
(deftest dataset-instance-predicates
(let [ds (make-dataset "test" [:a :b {:c [:d :e]}] [{:a 1 :b 2 :c :d} [4 5 :e]])

View file

@ -187,7 +187,7 @@
res (make-apply-filter :clj-batch
{:process add-max-diff-values
:determine-dataset-format add-max-diff-attr} ds)]
(is (= (dataset-as-maps res)
[{:a 1 :max-diff 3}
(is (= [{:a 1 :max-diff 3}
{:a 2 :max-diff 2}
{:a 4 :max-diff 0}]))))
{:a 4 :max-diff 0}]
(dataset-as-maps res)))))