diff options
Diffstat (limited to 'archive/0.vm.arc/callcc.mu')
-rw-r--r-- | archive/0.vm.arc/callcc.mu | 20 |
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 +]) |