; your code goes here
;;Global variable for the continuation
(define k-global #f)
;;We are using let* instead of let so that we can guarantee
;;the evaluation order
(let* (
(my-number 3)
(k
;;set bookmark here
(call-with-current-continuation
;;The continuation will be stored in "kont"
(lambda (kont)
;;return the continuation
kont))))
;;We are using "my-number" to show that the old stack
;;frame is being saved. When we revisit the continuation
;;the second time, the value will remain changed.
(display "The value of my-number is: ")
(display my-number)
(newline)
(set! my-number (+ my-number 1))
;;Save the continuation in a global variable.
(set! k-global k)
(display "test #2")
(newline)
)
(display "test#")
(newline)
;;Is "kontinuation" a continuation?
(if (procedure? k-global)
(begin
(display "This is the first run, k-global is a continuation")
(newline)
;;Send "4" to the continuation which goes to the bookmark
;;which will assign it to "k"
(k-global 4))
(begin
;;This occurs on the second run
(display "This is the second run, k-global is not a continuation, it is ")
(display k-global)
(newline)))
OyB5b3VyIGNvZGUgZ29lcyBoZXJlCgo7O0dsb2JhbCB2YXJpYWJsZSBmb3IgdGhlIGNvbnRpbnVhdGlvbgooZGVmaW5lIGstZ2xvYmFsICNmKQoKOztXZSBhcmUgdXNpbmcgbGV0KiBpbnN0ZWFkIG9mIGxldCBzbyB0aGF0IHdlIGNhbiBndWFyYW50ZWUKOzt0aGUgZXZhbHVhdGlvbiBvcmRlcgoobGV0KiAoCiAgICAgICAobXktbnVtYmVyIDMpCiAgICAgICAoawogICAgICAgICA7O3NldCBib29rbWFyayBoZXJlCiAgICAgICAgIChjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb24KICAgICAgICAgICA7O1RoZSBjb250aW51YXRpb24gd2lsbCBiZSBzdG9yZWQgaW4gImtvbnQiCiAgICAgICAgICAgKGxhbWJkYSAoa29udCkKICAgICAgICAgICAgIDs7cmV0dXJuIHRoZSBjb250aW51YXRpb24KICAgICAgICAgICAgIGtvbnQpKSkpCgogICAgIDs7V2UgYXJlIHVzaW5nICJteS1udW1iZXIiIHRvIHNob3cgdGhhdCB0aGUgb2xkIHN0YWNrCiAgICAgOztmcmFtZSBpcyBiZWluZyBzYXZlZC4gIFdoZW4gd2UgcmV2aXNpdCB0aGUgY29udGludWF0aW9uCiAgICAgOzt0aGUgc2Vjb25kIHRpbWUsIHRoZSB2YWx1ZSB3aWxsIHJlbWFpbiBjaGFuZ2VkLgogICAgIChkaXNwbGF5ICJUaGUgdmFsdWUgb2YgbXktbnVtYmVyIGlzOiAiKQogICAgIChkaXNwbGF5IG15LW51bWJlcikKICAgICAobmV3bGluZSkKICAgICAoc2V0ISBteS1udW1iZXIgKCsgbXktbnVtYmVyIDEpKQoKICAgICA7O1NhdmUgdGhlIGNvbnRpbnVhdGlvbiBpbiBhIGdsb2JhbCB2YXJpYWJsZS4KICAgICAoc2V0ISBrLWdsb2JhbCBrKQogICAgIChkaXNwbGF5ICJ0ZXN0ICMyIikKICAgICAobmV3bGluZSkKICAgICApCiAgICAgCihkaXNwbGF5ICJ0ZXN0IyIpCihuZXdsaW5lKQoKOztJcyAia29udGludWF0aW9uIiBhIGNvbnRpbnVhdGlvbj8KKGlmIChwcm9jZWR1cmU/IGstZ2xvYmFsKQogICAgKGJlZ2luCiAgICAgICAoZGlzcGxheSAiVGhpcyBpcyB0aGUgZmlyc3QgcnVuLCBrLWdsb2JhbCBpcyBhIGNvbnRpbnVhdGlvbiIpCiAgICAgICAobmV3bGluZSkKICAgICAgIDs7U2VuZCAiNCIgdG8gdGhlIGNvbnRpbnVhdGlvbiB3aGljaCBnb2VzIHRvIHRoZSBib29rbWFyawogICAgICAgOzt3aGljaCB3aWxsIGFzc2lnbiBpdCB0byAiayIKICAgICAgIChrLWdsb2JhbCA0KSkKICAgICAoYmVnaW4KICAgICAgIDs7VGhpcyBvY2N1cnMgb24gdGhlIHNlY29uZCBydW4KICAgICAgIChkaXNwbGF5ICJUaGlzIGlzIHRoZSBzZWNvbmQgcnVuLCBrLWdsb2JhbCBpcyBub3QgYSBjb250aW51YXRpb24sIGl0IGlzICIpCiAgICAgICAoZGlzcGxheSBrLWdsb2JhbCkKICAgICAgIChuZXdsaW5lKSkp