PasteRack.org
Paste # 37256
2014-11-05 08:05:19

Forked from paste # 78536.

Fork as a new paste.

Paste viewed 331 times.


Embed:

kont

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

=>

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

test#

This is the second run, k-global is not a continuation, it is 4