Created
July 24, 2021 00:16
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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