I hereby claim:
- I am michalmarczyk on github.
- I am michalmarczyk (https://keybase.io/michalmarczyk) on keybase.
- I have a public key ASDT-njSq0f89ZYOOhDYbdSb5MZkLq6LD_veaTD7vzegmQo
To claim this, I am signing this object:
(defn validate-under [attr validator] | |
(fn [m] | |
(let [result (validator (get m attr))] | |
[(empty? result) (v/nest attr result)]))) | |
(comment | |
(def example-v | |
(v/validation-set | |
(validate-under :foo (v/validation-set (v/presence-of :bar))))) |
(defn thread-or | |
"Call each of the fs on a separate thread. Return logical | |
disjunction of the results. Short-circuit (and cancel the calls to | |
remaining fs) on first truthy value returned." | |
[& fs] | |
(let [ret (promise) | |
fps (promise)] | |
(deliver fps | |
(doall (for [f fs] | |
(let [p (promise)] |
(defn thread-and | |
"Computes logical conjunction of return values of fs, each of which | |
is called in a future. Short-circuits (cancelling the remaining | |
futures) on first falsey value." | |
[& fs] | |
(let [done (promise) | |
ret (atom true) | |
fps (promise)] | |
(deliver fps (doall (for [f fs] | |
(let [p (promise)] |
(defn thread-or | |
"Call each of the fs on a separate thread. Return logical | |
disjunction of the results. Short-circuit (and cancel the calls to | |
remaining fs) on first truthy value returned." | |
[& fs] | |
(let [futs-and-cs | |
(doall (for [f fs] | |
(let [c (chan)] | |
[(future (>!! c (f))) c])))] | |
(loop [futs-and-cs futs-and-cs] |
(defn thread-and | |
"Call each of the fs on a separate thread. Return logical | |
conjunction of the results. Short-circuit (and cancel the calls | |
to remaining fs) on first falsey value returned." | |
[& fs] | |
(let [futs-and-cs | |
(doall (for [f fs] | |
(let [c (chan)] | |
[(future (>!! c (f))) c])))] | |
(loop [futs-and-cs futs-and-cs] |
(use 'clojure.core.async) | |
(def output (atom [])) | |
(defn producer [ctrl k] | |
(go (loop [i 0] | |
(when-let [c (<! ctrl)] | |
(>! c [k i]) | |
(>! ctrl c) | |
(recur (inc i)))))) |
;; [1 2 3] -> [1 [2 [3]]] | |
(defn f [xs] | |
(if (next xs) | |
[(first xs) (vec (f (next xs)))] | |
(vec xs))) | |
(defn g [v] | |
(reduce (fn [acc x] | |
[x acc]) |
(defn same-fringe | |
"http://c2.com/cgi/wiki?SameFringeProblem" | |
[t1 t2] | |
(letfn [(walk [t c] | |
(go (if (seq? t) | |
(doseq [t' t] | |
(<! (walk t' c))) | |
(>! c t))))] | |
(let [c1 (chan) | |
c2 (chan)] |
I hereby claim:
To claim this, I am signing this object:
(ns timings) | |
(defn -main [] | |
(println ";;; satisfies?") | |
(println "(satisfies? ISeq (list 1 2 3))") | |
(let [coll (list 1 2 3)] (time (dotimes [_ 10000000] (satisfies? ISeq coll)))) | |
(println "(satisfies? ISeq [1 2 3])") | |
(let [coll [1 2 3]] (time (dotimes [_ 10000000] (satisfies? ISeq coll)))) | |
(println) |