# delimited/undelimited continuation

Continuation is the future of the program, for example

```(+ 3 2
(* 5
(+ 6 1)
8))
```

What is the continuation of `(+ 6 1)`? We can get the result by replacing `(+ 6 1)` with a hole:

```(+ 3 2
(* 5
?hole
8))
```

By encoding continuation with the lambda, continuation of `(+ 6 1)` is:

```(lambda (x)
(+ 3 2
(* 5
x
8)))
```

We can check it by `let/cc`

```(+ 3 2
(* 5
(let/cc k
(k (+ 6 1)))
8))
```

`k` is the continuation, original result is `285`, you may guess new result will be `11405` since `(+ 3 2 (* 5 285 8))` is `11405`. But, actually the new result is still `285`, because I do not tell all the true. Continuation is not

```(lambda (x)
(+ 3 2
(* 5
x
8)))
```

but

```(lambda (x)
(exit
(+ 3 2
(* 5
x
8))))
```

This is because end the program also was the future of program. Thus, we have `(+ 3 2 (* 5 (exit 285) 8))` that is `285`, not `(+ 3 2 (* 5 285 8)) = 11405`. We call such continuation: undelimited continuation.

## 1 Delimited continuation

So what is delimited continuation? By default, abort locates at the most out scope, delimited continuation means we can assign others location. To do so, we need some helper(the following code cannot work in racket, but just pseudo code):

```(+ 3 2
(abort-here
(* 5 x 8)))
```

Then the continuation would be:

```(lambda (x)
(exit
(* 5 x 8)))
```

## 2 Conclusion

That's it, continuation can be parted to delimited and undelimited, now you know that :).

Date: 2021-03-13 Sat 00:00