aboutsummaryrefslogtreecommitdiffhomepage
path: root/anaphora.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'anaphora.lisp')
-rw-r--r--anaphora.lisp26
1 files changed, 26 insertions, 0 deletions
diff --git a/anaphora.lisp b/anaphora.lisp
new file mode 100644
index 0000000..13bb980
--- /dev/null
+++ b/anaphora.lisp
@@ -0,0 +1,26 @@
+(in-package #:gtwiwtg.anaphora)
+
+(defmacro afor (generator &body body)
+ "Anaphoric FOR. Binds the values produced by GENERATOR to the variable IT.
+
+Example:
+
+> (afor (times 3) (print it))
+0
+1
+2
+
+"
+ `(for it ,expr ,@body))
+
+(defmacro afold (init generator update)
+ "Anaphoric FOLD. Binds the values produced by GENERATOR to IT, and
+binds the accumulating variable to ACC.
+
+Example:
+
+> (afold 0 (times 10) (+ acc it))
+45
+
+"
+ `(fold (acc ,init) (it ,expr) ,update))