aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/macros.clj
diff options
context:
space:
mode:
authorKonrad Hinsen <konrad.hinsen@laposte.net>2009-01-08 09:32:40 +0000
committerKonrad Hinsen <konrad.hinsen@laposte.net>2009-01-08 09:32:40 +0000
commitb78dd0739319e226a793a8986682dbe8db844ccd (patch)
tree8a64463924fd87343d9ccbad3884b044f194f05d /src/clojure/contrib/macros.clj
parent081456e0ac0880450993f7d50d56609b16b1cfb6 (diff)
New file macros.clj (plus a corresponding entry in build.xml)
Diffstat (limited to 'src/clojure/contrib/macros.clj')
-rw-r--r--src/clojure/contrib/macros.clj25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/clojure/contrib/macros.clj b/src/clojure/contrib/macros.clj
new file mode 100644
index 00000000..7d2cc642
--- /dev/null
+++ b/src/clojure/contrib/macros.clj
@@ -0,0 +1,25 @@
+;; Various useful macros
+
+;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use
+;; and distribution terms for this software are covered by the Eclipse
+;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+;; which can be found in the file epl-v10.html at the root of this
+;; distribution. By using this software in any fashion, you are
+;; agreeing to be bound by the terms of this license. You must not
+;; remove this notice, or any other, from this software.
+
+(ns clojure.contrib.macros)
+
+(defmacro const
+ "Evaluate the constant expression expr at compile time."
+ [expr]
+ (eval expr))
+
+(defmacro letfn
+ "A variant of let for local function definitions. fn-bindings consists
+ of name/args/body triples, with (letfn [name args body] ...)
+ being equivalent to (let [name (fn name args body)] ...)."
+ [fn-bindings exprs]
+ (let [makefn (fn [[name args body]] (list name (list 'fn name args body)))
+ fns (vec (apply concat (map makefn (partition 3 fn-bindings))))]
+ `(let ~fns ~exprs)))