File: dynamic.scm

package info (click to toggle)
elk 3.99.6-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 5,292 kB
  • ctags: 3,323
  • sloc: ansic: 22,255; sh: 8,333; lisp: 6,208; makefile: 1,143; awk: 154; cpp: 92
file content (25 lines) | stat: -rw-r--r-- 542 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
;;; -*-Scheme-*-

(define cont #f)
(define done #f)

(define (pr msg)
  (display msg) (newline))

(define (doit)
  (dynamic-wind
    (lambda () (pr "  1:in"))
    (lambda ()
      (set! done (call-with-current-continuation
		   (lambda (c) (set! cont c) (pr "    catch") #f))))
    (lambda () (pr "  1:out")))
  (if (not done)
      (dynamic-wind
        (lambda () (pr "  2:in"))
        (lambda () (pr "    throw") (cont #t))
        (lambda () (pr "  2:out")))))

(dynamic-wind
  (lambda () (pr "0:in"))
  doit
  (lambda () (pr "0:out")))