Skip to content

Instantly share code, notes, and snippets.

wagjo / gist:8731671
Created Jan 31, 2014
Playing with quil
View gist:8731671
(:use [quil.core])
(:require [clojure.string :as s]))
(defn setup []
(frame-rate 1)
(background 255))
(def *scale* 2)
View gist:8786305
(defprotocol IMutable
(-cas! [o oldval newval]
"Sets the value to newval if and only if the current value
is identical to oldval. Returns true if set happened,
otherwse returns false. Mutates `o`.")
(-alter! [o f] [o f x] [o f x y] [o f x y z] [o f x y z args]
"Changes referenced value with (apply f val args).
Returns new value. Mutates `o`.")
(-reset! [o val]
"Resets the referenced value to `val`.
View gist:9813500
(defn update-in*
[m [k & ks] f & args]
(let [k (if (and (instance? clojure.lang.Indexed m)
(integer? k)
(neg? k))
(+ (count m) k)
(if ks
(assoc m k (apply update-in* (get m k) ks f args))
(assoc m k (apply f (get m k) args)))))
wagjo / gist:9958354
Created Apr 3, 2014
Upcoming reducible IO library for Clojure
View gist:9958354
;; Input vector of bytes
(def vec (into (vector-of :byte)
(repeatedly 1000000 #(rand-int 128))))
;; Output file
(def out ( "out.bin"))
;; Classic reduction -> 3835 ms
(let [write-fn (fn [r w] (.write out w))]
(time (reduce write-fn nil (map dec vec))))
wagjo / gist:10017343
Last active Aug 29, 2015
Upcoming library* for multireducibles
View gist:10017343
;; Multireducibles (with support for folding)
(def s1 "Hello World")
(def s2 "lllllllllll")
;; create multireducible with zip
(seq (zip s1 s2))
;; => ((\H \l) (\e \l) (\l \l) (\l \l) (\o \l) (\space \l) (\W \l) (\o \l) (\r \l) (\l \l) (\d \l))
wagjo / gist:b687158ab0ff6aa8cb33
Last active Aug 29, 2015
Foldable multireducible
View gist:b687158ab0ff6aa8cb33
;; excerpt of foldable multireducible impl
;; - introducing concept of mutable iterator, which is
;; much faster than seq
;; - this is for a (yet unreleased) custom patched clojure,
;; where clojure.lang interfaces can behave like protocols
;; - map is reducer variant, thats why I have to call seq on it
;; - seq is patched to support any reducible, not just Seqable
(defn fold-sectionable
View gist:d6419a289a64c503010c
"@context": {
"name": "",
"homepage": {
"@id": "",
"@type": "@id"
wagjo / gist:30000277f6923ac8d88f
Last active Aug 29, 2015
Wrapping reducer vs reducer with atom
View gist:30000277f6923ac8d88f
(ns redtest.core
(:require [clojure.core.reducers]
[clojure.core.protocols :refer
[CollReduce coll-reduce]]))
;; state is kept in a ret
(deftype WrapState [ret n])
(deftype WrapTake [coll n]
View gist:9212ca5e3a395f839707
(defprotocol IReducing
"A value protocol for augmented reducing functions."
"Returns default initial unwrapped value."
"Returns final wrapped result, and performs flushing or cleaning
of internal state. Returned wrap should have cleaned state,
so that eventual subsequent calls to -finish will perform