Skip to content

Instantly share code, notes, and snippets.

# Imported Clojure functions
clojure('=', 2) -> eq
clojure('dec', 1) -> dec
clojure('conj', 2) -> conj
clojure('vector', 0) -> vector
clojure('count', 1) -> count
clojure('merge', 2) -> combine
clojure('first', 1) -> first
clojure('next', 1) -> rest
clojure('concat', 2) -> concat
;; Dispatch message to object
(defmacro call* [obj, getter & args]
`(let [object# ~obj]
(((keyword '~getter) @(type object#)) object# ~@args)))
(defrecord Dodo [instance])
(def DodoClass (new Dodo nil))
# Dodo code, imperative style
# ---
String s = ""
loop for (int n = 1; n < 100; ++.n)
{
test
{
n % 4 = 0:
continue.
;; feed macro
(use 'clojure.walk)
(defmacro _>_ [& exprs]
(reduce
(fn [inner step]
(clojure.walk/postwalk-replace {'___ inner} step))
(reverse exprs)))
;; Protocol for dodo prototypes
(defprotocol DodoProtocol
@jido
jido / gist:588764
Created September 20, 2010 22:25
The "feed" macro inserts what follows in the blank. Very handy. Author: chouser
(use 'clojure.walk)
(defmacro _>_ [& exprs]
(reduce
(fn [inner step]
(clojure.walk/postwalk-replace {'___ inner} step))
(reverse exprs)))
(defn cat [lst, val, cont] #(cont (conj lst val)))
(defn fold [vals, seed, next, return, error]
(if (< 0 (count vals))
#(next
(first vals)
seed
(fn [result]
(fold (subvec vals 1) result next return error))
error)
#(return seed)))