Skip to content

Instantly share code, notes, and snippets.

@KnowledgeGarden
Created July 24, 2021 00:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KnowledgeGarden/330b4147cd3d4909ef55684fc4c1f00d to your computer and use it in GitHub Desktop.
Save KnowledgeGarden/330b4147cd3d4909ef55684fc4c1f00d to your computer and use it in GitHub Desktop.
(require '[clojure.pprint :refer [pprint]])
(defn simple-true-fn
"This simply returns true. You could also do: (def simple-true-fn (constantly true))"
[]
true)
(defn simple-false-fn
"This simply returns false. You could also do: (def simple-false-fn (constantly false))"
[]
false)
(defn evaluate-and-fns
"Returns true if every function in members returns a value that is true-ish according to Clojure's
truthiness rules. Otherwise returns false."
[members]
(every? (fn [member]
(member))
members))
;; function run along a sequence and, theoretically speaking
;; return true if it sees true; otherwise false
(defn evaluate-or-fns
[members]
(some eval members))
(println "\nRunning simple-true-fn:")
(pprint {:simple-true-fn simple-true-fn
:called-simple-true-fn (simple-true-fn)})
(println "\nRunning simple-false-fn:")
(pprint {:simple-false-fn simple-false-fn
:called-simple-false-fn (simple-false-fn)})
(println "\nRunning evaluate-and-fns:") ;;;;;;;;;;;;;;;;;;;;;
(pprint {:evaluate-and-fns evaluate-and-fns
:called-evaluate-and-fns-list-all-true (evaluate-and-fns (list simple-true-fn simple-true-fn))
:called-evaluate-and-fns-list-mixed (evaluate-and-fns (list simple-true-fn simple-false-fn))
:called-evaluate-and-fns-vec-all-true (evaluate-and-fns [simple-true-fn simple-true-fn])
:called-evaluate-and-fns-vec-mixed (evaluate-and-fns [simple-true-fn simple-false-fn])})
(println "\nRunning evaluate-or-fns:") ;;;;;;;;;;;;;;;;;;;;;
(pprint {:evaluate-or-fns evaluate-and-fns
:called-evaluate-or-fns-list-all-true (evaluate-or-fns (list simple-true-fn simple-true-fn))
:called-evaluate-or-fns-list-mixed (evaluate-or-fns (list simple-true-fn simple-false-fn))
:called-evaluate-or-fns-vec-all-true (evaluate-or-fns [simple-true-fn simple-true-fn])
:called-evaluate-or-fns-vec-mixed (evaluate-or-fns [simple-true-fn simple-false-fn])})
(defn evaluate-and-values
"Returns true if every value is true-ish according to Clojure's truthiness rules. Otherwise returns
false."
[members]
(every? identity
members))
(println "\nRunning evaluate-and-values:")
(pprint {:evaluate-and-values evaluate-and-values
:called-evaluate-and-values-list-all-true (evaluate-and-values (list true true))
:called-evaluate-and-values-list-mixed (evaluate-and-values (list true false))
:called-evaluate-and-values-vec-all-true (evaluate-and-values [true true])
:called-evaluate-and-values-vec-mixed (evaluate-and-values [true false])})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment