aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscgilardi <scgilardi@gmail.com>2008-07-26 14:39:36 +0000
committerscgilardi <scgilardi@gmail.com>2008-07-26 14:39:36 +0000
commit0efe85ecc3a9ad613c2b46eba929c7f840a44f9d (patch)
tree1791d1bcee13aec975b42b3a29efcfa3b95997a0
parentb1a0b7616ccfba7b2871f7fe4e05cf4300541fd0 (diff)
updates for my remaining libs to the new namespace organization
-rw-r--r--pred/pred.clj108
1 files changed, 108 insertions, 0 deletions
diff --git a/pred/pred.clj b/pred/pred.clj
new file mode 100644
index 00000000..601888ce
--- /dev/null
+++ b/pred/pred.clj
@@ -0,0 +1,108 @@
+;; Copyright (c) Stephen C. Gilardi. All rights reserved.
+;; The use and distribution terms for this software are covered by the
+;; Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+;; which can be found in the file CPL.TXT 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.
+;;
+;; pred.clj
+;;
+;; Some clojure predicates
+;;
+;; scgilardi (gmail)
+;; 28 June 2008
+
+(clojure/in-ns 'clojure-contrib.pred)
+(clojure/refer 'clojure)
+
+(defn coll?
+ "Returns true if x implements IPersistentCollection"
+ [x]
+ (instance? clojure.lang.IPersistentCollection x))
+
+(defn list?
+ "Returns true if x implements IPersistentList"
+ [x]
+ (instance? clojure.lang.IPersistentList x))
+
+;; map
+
+(defn set?
+ "Returns true if x implements IPersistentSet"
+ [x]
+ (instance? clojure.lang.IPersistentSet x))
+
+(defn stack?
+ "Returns true if x implements IPersistentStack"
+ [x]
+ (instance? clojure.lang.IPersistentStack x))
+
+;; vector
+
+(defn ref?
+ "Returns true if x implements IRef"
+ [x]
+ (instance? clojure.lang.IRef x))
+
+;; seq
+;; var
+
+(defn map-entry?
+ "Returns true if x is a MapEntry"
+ [x]
+ (instance? clojure.lang.MapEntry x))
+
+(defn atom?
+ "Returns true if x is not a collection"
+ [x]
+ (not (coll? x)))
+
+(defn number?
+ "Returns true if x is a Number"
+ [x]
+ (instance? Number x))
+
+(defn ratio?
+ "Returns true if x is a Ratio"
+ [x]
+ (instance? clojure.lang.Ratio x))
+
+(defn range?
+ "Returns true if x is a Range"
+ [x]
+ (instance? clojure.lang.Range x))
+
+(defn function?
+ "Returns true if x implements IFn"
+ [x]
+ (instance? clojure.lang.IFn x))
+
+(defmacro macro?
+ "Returns true if x is a function and the symbol of the
+ same name can be resolved and has its :macro metadata
+ set"
+ [x]
+ `(and (function? ~x) (boolean (:macro ^#'~x))))
+
+(defn integer?
+ "Returns true if x is an integer"
+ [x]
+ (or (instance? Integer x)
+ (instance? Long x)
+ (instance? BigInteger x)))
+
+(defn even?
+ "Returns true if x is even, throws an exception if x is not an integer"
+ [x]
+ (zero? (bit-and x 1)))
+
+(defn odd?
+ "Returns true if x is odd, throws an exception if x is not an integer"
+ [x]
+ (not (even? x)))
+
+(defn empty?
+ "Returns true if coll is empty"
+ [coll]
+ (not (seq coll)))