Skip to content

Instantly share code, notes, and snippets.

(def fib-var-obj
(fn [x]
(if (< x 2)
1
(+ (fib-var-obj (- x 1))
(fib-var-obj (- x 2))))))
(defn fib-lex-obj [x]
(if (< x 2)
1
(defmacro <- [& body]
`(-> ~(last body) ~@(butlast body)))
(deftest <--test
(is (= [2 3]
(-> {1 1}
(assoc 3 4)
(update-in [1] inc)
(->> (map-vals dec)
(map-keys inc)
@w01fe
w01fe / univariate_stats.clj
Created September 28, 2012 23:25
Univariate stats example: as 'let'
;; Take a map {:xs xs} and return a map
;; of simple univariate statistics of xs
(defn stats [{:keys [xs]}]
(let [n (count xs)
m (/ (sum identity xs) n)
m2 (/ (sum #(* % %) xs) n)
v (- m2 (* m m))]
{:n n ; count
:m m ; mean
:m2 m2 ; mean square
@w01fe
w01fe / univariate_stats_graph_attempt.clj
Created September 28, 2012 23:27
Univariate stats as Graph: first attempt
(def almost-stats-graph
{:n (fn [xs] (count xs))
:m (fn [xs n] (/ (sum identity xs) n))
:m2 (fn [xs n] (/ (sum #(* % %) xs) n))
:v (fn [m m2] (- m2 (* m m)))})
@w01fe
w01fe / univariate_stats_graph.clj
Created September 28, 2012 23:28
Univariate stats as Graph
(def stats-graph
{:n (fnk [xs] (count xs))
:m (fnk [xs n] (/ (sum identity xs) n))
:m2 (fnk [xs n] (/ (sum #(* % %) xs) n))
:v (fnk [m m2] (- m2 (* m m)))})
@w01fe
w01fe / fnk_examples.clj
Created September 28, 2012 23:32
Bring on the fnk
(defnk foo [x y [s 1]]
(+ x (* y s)))
(foo {:x 2 :y 3 :s 2})
;; ==> 8
(foo {:x 2 :y 3})
;; ==> 5
(foo {:x 2})
@w01fe
w01fe / graph_simple_compilation.clj
Created October 1, 2012 02:43
Simple graph compilation
;; Functionally identical to (defn stats ...) above
(def stats (graph/eager-compile stats-graph))
(stats {:xs [1 2 3 6]})
; ==> {:n 4
; :m 3
; :m2 12.5
; :v 3.5)
;; Result is error checked
@w01fe
w01fe / graph_fancy_compilation.clj
Created October 1, 2012 02:44
Fancier Graph compilation examples
(def lazy-stats (graph/lazy-compile stats-graph))
(:m (lazy-stats {:xs [1 2 3 6]}))
; ==> 3
; WIN: :m2 and :v are not computed.
(def par-stats (graph/parallel-compile stats-graph))
(:v (par-stats {:xs [1 2 3 6]}))
@w01fe
w01fe / graph_monitoring.clj
Created October 1, 2012 02:53
Monitoring a Graph
(defn observe-graph [g record-node-time!]
(into {}
(for [[k f] g]
[k
(with-meta
(fn [m]
(let [t0 (System/nanoTime)
v (f m)
t1 (System/nanoTime)]
(record-node-time! k (- t1 t0))
@w01fe
w01fe / fnk_examples.clj
Created October 2, 2012 00:43 — forked from aria42/fnk_examples.clj
Bring on the fnk
(defnk foo [x y [s 1]]
(+ x (* y s)))
(foo {:x 2 :y 3 :s 2})
; ==> 8
;; 's' defaults to 1
(foo {:x 2 :y 3})
; ==> 5