else abort 20
) + 100
end
- in (foo 2) + 1;; (* this line is new *)
+ in (foo 2) + 1000;; (* this line is new *)
we can imagine a box:
(shift k
(if (eqv? x 1) (k 10) 20))
100)))])
- (+ (foo 1) 1000))
-
+ (+ (foo 2) 1000))
-And in OCaml:
-<pre>
+<!--
# #require "delimcc";;
# open Delimcc;;
# let reset body = let p = new_prompt () in push_prompt p (body p);;
- : int = 1020
# test_shift 2;;
- : int = 1020
-</pre>
+-->
+
Various of the tools we've been introducing over the past weeks are inter-related. We saw coroutines implemented first with zippers; here we've talked in the abstract about their being implemented with continuations. Oleg says that "Zipper can be viewed as a delimited continuation reified as a data structure." Ken expresses the same idea in terms of a zipper being a "defunctionalized" continuation---that is, take something implemented as a function (a continuation) and implement the same thing as an inert data structure (a zipper).