PasteRack.org
Paste # 78536
2014-11-05 07:44:52

Fork as a new paste.

Paste viewed 329 times.


Embed:

kont

  1. #lang racket
  2.  
  3.     ; your code goes here
  4.  
  5.     ;;Global variable for the continuation
  6.     (define k-global #f)
  7.  
  8.     ;;We are using let* instead of let so that we can guarantee
  9.     ;;the evaluation order
  10.     (let* (
  11.     (my-number 3)
  12.     (k
  13.     ;;set bookmark here
  14.     (call-with-current-continuation
  15.     ;;The continuation will be stored in "kont"
  16.     (lambda (kont)
  17.     ;;return the continuation
  18.     kont))))
  19.  
  20.     ;;We are using "my-number" to show that the old stack
  21.     ;;frame is being saved. When we revisit the continuation
  22.     ;;the second time, the value will remain changed.
  23.     (display "The value of my-number is: ")
  24.     (display my-number)
  25.     (newline)
  26.     (set! my-number (+ my-number 1))
  27.  
  28.     ;;Save the continuation in a global variable.
  29.     (set! k-global k)
  30.     (display "test #2")
  31.     (newline)
  32.     )
  33.  
  34.     (display "test#")
  35.     (newline)
  36.  
  37.     ;;Is "kontinuation" a continuation?
  38.     (if (procedure? k-global)
  39.     (begin
  40.     (display "This is the first run, k-global is a continuation")
  41.     (newline)
  42.     ;;Send "4" to the continuation which goes to the bookmark
  43.     ;;which will assign it to "k"
  44.     (k-global 4))
  45.     (begin
  46.     ;;This occurs on the second run
  47.     (display "This is the second run, k-global is not a continuation, it is ")
  48.     (display k-global)
  49.     (newline)))

=>

The value of my-number is: 3

test #2

test#

This is the first run, k-global is a continuation

The value of my-number is: 4

test #2