Mercurial > rlm
view src/rlm/clojure_example.clj @ 0:78a630e650d2
initial import
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 18 Oct 2011 00:57:08 -0700 |
parents | |
children |
line wrap: on
line source
1 (ns rlm.clojure-example)3 (defn curry4 "takes a function with a fixed number of args and modifies5 it to that it will be automaticaly curried when called with6 less args"7 ([num-args f & eval-list]8 (if (= num-args (count eval-list))9 (apply f eval-list)10 (fn [& args]11 (apply curry num-args f (concat eval-list args))))))13 (defn mix14 "Takes any number of mathematically equal functions with15 possibly different run-times and returns a function that16 runs each in a separate thread, returns the result from17 the first thread which finishes, and cancels the other threads."18 {:author "Robert McIntyre"}19 ([& functions]20 (fn [& args]21 (let [result (promise)22 futures23 (doall (for [fun functions]24 (future (deliver result (apply fun args)))))25 answer @result]26 (dorun (map future-cancel futures))27 answer))))29 (defn memoize*30 "Returns a memoized version of a referentially transparent31 function. The memoized version of the function keeps a cache of the32 mapping from argument to results and, when calls with the same33 arguments are repeated often, has higher performance at the expense34 of higher memory use."35 {:added "1.0"}36 [f]37 (let [mem (atom {})]38 (fn [& args]39 (if-let [e (find @mem args)]40 (val e)41 (let [ret (apply f args)]42 (swap! mem assoc args ret)43 ret)))))45 ;;immutable data structures46 (def r {:a :a :b :b})47 (def b (assoc r :c :c))49 (defn collapse [coll & head]50 (if (= (count coll) 0)51 (first head)52 (let [x (first coll)]53 (if (list? x)54 (collapse (concat x (rest coll)) (first head))55 (collapse (rest coll) (conj (vec (first head)) x))))))56 ;;email clojure group about this59 (defn collapse* [coll]60 (loop [head [] body coll]61 (let [x (first body)]62 (cond (= (count body) 0) head63 (list? x) (recur head (concat x (next body)))64 true (recur (conj head x) (next body))))))