diff options
author | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-19 12:52:35 +0000 |
---|---|---|
committer | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-19 12:52:35 +0000 |
commit | 1cc9c2d456f26142c577fca7d233870d2f3586ea (patch) | |
tree | 2bbe9b6aeaa61ba6d326c5a094f750134cd9cabd /src/clojure/contrib/generic/comparison.clj | |
parent | 3ea2f7c795b79f0f9d59938ff16770c0d2627a37 (diff) |
generic: new module comparison plus general support code
Diffstat (limited to 'src/clojure/contrib/generic/comparison.clj')
-rw-r--r-- | src/clojure/contrib/generic/comparison.clj | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/clojure/contrib/generic/comparison.clj b/src/clojure/contrib/generic/comparison.clj new file mode 100644 index 00000000..6bd34184 --- /dev/null +++ b/src/clojure/contrib/generic/comparison.clj @@ -0,0 +1,56 @@ +;; Generic interfaces for comparison operations + +;; by Konrad Hinsen +;; last updated March 19, 2009 + +;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use +;; and distribution terms for this software are covered by the Eclipse +;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) +;; which can be found in the file epl-v10.html at the root of this +;; distribution. By using this software in any fashion, you are +;; agreeing to be bound by the terms of this license. You must not +;; remove this notice, or any other, from this software. + +(ns clojure.contrib.generic.comparison + "Generic comparison interface + + NOTE: This library is VERY experimental. It WILL change significantly + with future release. + + This library defines generic versions of = < > <= >= zero? as multimethods + that can be defined for any type." + (:refer-clojure :exclude [= < > <= >= zero?]) + (:use [clojure.contrib.generic + :only (root-type nulary-type nary-type nary-dispatch)])) + +; +; zero? +; +(defmulti zero? type) + +; +; Equality +; +(defmulti = nary-dispatch) + +(defmethod = root-type + [x] true) + +(defmethod = nary-type + [x y & more] + (if (= x y) + (if (next more) + (recur y (first more) (next more)) + (= y (first more))) + false)) + +; +; Implementations for Clojure's built-in types +; +(defmethod zero? java.lang.Number + [x] + (clojure.core/zero? x)) + +(defmethod = [Object Object] + [x y] + (clojure.core/= x y)) |