https://github.com/akkartik/mu1/blob/master/continuation5.mu
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 
12 
13 
14 
15 
16 
17 def main [
18   local-scope
19   l:&:list:num <- copy null
20   l <- push 3, l
21   l <- push 2, l
22   l <- push 1, l
23   k:continuation, x:num, done?:bool <- call-with-continuation-mark 100/mark, create-yielder, l
24   a:num <- copy 1
25   {
26     break-if done?
27     $print x 10/newline
28     k, x:num, done?:bool <- call k, a  
29     a <- add a, 1
30     loop
31   }
32 ]
33 
34 def create-yielder l:&:list:num -> n:num, done?:bool [
35   local-scope
36   load-inputs
37   a:num <- copy 0
38   {
39     done? <- equal l, null
40     break-if done?
41     n <- first l
42     l <- rest l
43     n <- add n, a
44     a <- return-continuation-until-mark 100/mark, n, done?  
45     loop
46   }
47   return-continuation-until-mark 100/mark, -1, done?
48   assert false, [called too many times, ran out of continuations to return]
49 ]