about summary refs log tree commit diff stats
path: root/archive/0.vm.arc/callcc.mu
diff options
context:
space:
mode:
Diffstat (limited to 'archive/0.vm.arc/callcc.mu')
-rw-r--r--archive/0.vm.arc/callcc.mu20
1 files changed, 20 insertions, 0 deletions
diff --git a/archive/0.vm.arc/callcc.mu b/archive/0.vm.arc/callcc.mu
new file mode 100644
index 00000000..20dffeff
--- /dev/null
+++ b/archive/0.vm.arc/callcc.mu
@@ -0,0 +1,20 @@
+; in mu, call-cc (http://en.wikipedia.org/wiki/Call-with-current-continuation)
+; is constructed out of a combination of two primitives:
+;   'current-continuation', which returns a continuation, and
+;   'continue-from', which takes a continuation to
+
+(function g [
+  (c:continuation <- current-continuation)  ; <-- loop back to here
+  (print-character nil:literal/terminal ((#\a literal)))
+  (reply c:continuation)
+])
+
+(function f [
+  (c:continuation <- g)
+  (reply c:continuation)
+])
+
+(function main [
+  (c:continuation <- f)
+  (continue-from c:continuation)            ; <-- ..when you hit this
+])