aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/pred/pred.clj
blob: 9760ec0e9f422be04493c81ed569d5dad2cfa540 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
;;  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
;;
;;  Items commented out below are defined in the clojure namespace
;;
;;  scgilardi (gmail)
;;  28 June 2008

(ns clojure.contrib.pred)

;; coll?
;; list?
;; map?
;; set?

(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)))

;; number?
;; ratio?

(defn range?
  "Returns true if x is a Range"
  [x]
  (instance? clojure.lang.Range x))

;; function? -> fn?

(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 (fn? ~x) (boolean (:macro ^#'~x))))

;; integer?
;; even?
;; odd?
;; empty?