chemoelectric

‘defer’

Sep 18th, 2025 (edited)
728
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.83 KB | None | 0 0
  1. (define (procedure1)
  2.   (define exit-procs '())
  3.   (define-syntax defer
  4.     (syntax-rules ()
  5.       ((defer proc)
  6.        (set! exit-procs (cons (cons proc '()) exit-procs)))
  7.       ((defer proc arg ...)
  8.        (let ((evaluated-args (list arg ...)))
  9.          (set! exit-procs (cons (cons proc evaluated-args)
  10.                                 exit-procs))))))
  11.   (dynamic-wind
  12.     (lambda () #f)
  13.     (lambda () (defer display "Hello, world!\n"))
  14.     (lambda ()
  15.       (display "Leaving procedure1.\n")
  16.       (let loop ((p exit-procs))
  17.         (cond ((pair? p)
  18.                (let ((proc-and-args (car p))
  19.                      (rest (cdr p)))
  20.                  (let ((proc (car proc-and-args))
  21.                        (args (cdr proc-and-args)))
  22.                    (apply proc args)
  23.                    (loop rest)))))))))
  24.  
  25. (procedure1)
Advertisement
Add Comment
Please, Sign In to add comment