Here are some Clojure functions for numerical tests.
user=> (zero? 0) true user=> (zero? 0.0) true user=> (zero? (/ 0 1)) true user=> (zero? (/ 1 1)) false user=> (zero? (inc -1)) true user=> (zero? "a") ClassCastException java.lang.String cannot be cast to java.lang.Number clojure.lang.Numbers.isZero (Numbers.java:92) user=> (zero? :a) ClassCastException clojure.lang.Keyword cannot be cast to java.lang.Number clojure.lang.Numbers.isZero (Numbers.java:92) user=> (zero? 3) false ;; note to self: Find out what a "radix" is user=> (zero? 2r000) true ;; hex notation user=> (zero? 0x0) true user=> (neg? -1) true user=> (neg 0) CompilerException java.lang.RuntimeException: Unable to resolve symbol: neg in this context, compiling:(/tmp/form-init455595109663875917.clj:1:1) ;; I guess there are no PUAs allowed in the Clojure community ;; kidding; that was just a typo user=> (neg? 0) false user=> (neg? 1) false user=> (neg? -0.1) true user=> (neg? 0.1) false user=> (neg? -(/ 5 2)) CompilerException clojure.lang.ArityException: Wrong number of args (2) passed to: core/neg?--inliner--4573, compiling:(/tmp/form-init455595109663875917.clj:1:1) ;; You learn something new every day user=> (neg? (/ -5 2)) true user=> (neg? (/ 5 2)) false ;; granted, this is somewhat artificial; I can see the dang minus hyphen ;; let's create some vars user=> (def x -1) #'user/x user=> (def y 1) #'user/y user=> (neg? x) true user=> (neg? y) false user=> (pos? x) false user=> (pos? y) true user=> (pos? 0) false user=> (pos? (/ 5 2)) true user=> (pos? (/ -5 2)) false user=> (pos? -5) false user=> (pos? 5) true user=> (pos? 5.22) true user=> (pos? -5.22) false user=> (def z 2) #'user/z user=> (even? z) true user=> (even? y) false user=> y 1 user=> (odd? y) true user=> (odd? :clojure-devs) IllegalArgumentException Argument must be an integer: :clojure-devs clojure.core/even? (core.clj:1372) ;; I kid, as ever ;; moving on..... user=> (odd? z) false user=> (odd? (/ 5 2)) IllegalArgumentException Argument must be an integer: 5/2 clojure.core/even? (core.clj:1372) user=> (odd? 5.0) IllegalArgumentException Argument must be an integer: 5.0 clojure.core/even? (core.clj:1372) ;; from the clojure docs: user=> (filter odd? (range 15)) (1 3 5 7 9 11 13) user=> (filter even? (range 15)) (0 2 4 6 8 10 12 14) ;; according to https://clojure.org/reference/reader, 2r101010 is equal to 42 user=> (Long/parseLong "101010" 2) 42 user=> (odd? 2r101010) false user=> (even? 2r101010) true
You’re welcome.