Mercurial > rlm
diff src/rlm/mike.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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/rlm/mike.clj Tue Oct 18 00:57:08 2011 -0700 1.3 @@ -0,0 +1,43 @@ 1.4 +(ns rlm.mike) 1.5 + 1.6 +(defmacro define [name e] 1.7 + (if (symbol? name) 1.8 + `(def ~name ~e) 1.9 + `(define ~(first name) (fn [~@(rest name)] (~@e))))) 1.10 + 1.11 +(defmacro lambda [a b] 1.12 + `(fn [~@a] ~b)) 1.13 + 1.14 +(defmacro with-quote-everything [form] 1.15 + (let [prime (first form) 1.16 + rests (rest form) 1.17 + rests (map (fn [form] `(quote ~form)) rests) 1.18 + ] 1.19 + `(~prime ~@rests))) 1.20 + 1.21 +(defn mike-define [name e] 1.22 + (if (symbol? name) 1.23 + (intern *ns* name e) 1.24 + (mike-define (first name) '(lambda (rest name) e )))) 1.25 + 1.26 +(defn Y 1.27 + "The y-combinator" 1.28 + [m] 1.29 + ((fn [future] 1.30 + (m (fn [arg] 1.31 + ((future future) arg)))) 1.32 + (fn [future] ;;this reminds me a lot of a quine! 1.33 + (m (fn [arg] 1.34 + ((future future) arg)))) )) 1.35 + 1.36 + 1.37 +(defn factorial [n] 1.38 + (if (zero? n) 1.39 + 1 1.40 + (* n (factorial (dec n)))) ) 1.41 + 1.42 +((Y (fn [rec] 1.43 + (fn [n] 1.44 + (if (zero? n) 1.45 + 1 1.46 + (* n (rec (dec n)))) ))) 6)