Skip to content

Instantly share code, notes, and snippets.

@ijp
Created November 2, 2013 14:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ijp/7279463 to your computer and use it in GitHub Desktop.
Save ijp/7279463 to your computer and use it in GitHub Desktop.
(define (discriminate f)
(define first? #t)
(define k #f)
(define (discriminator)
(define (return x) x)
(let ((x
(f (lambda (x)
(when first?
(set! first? #f)
(set! return (call/cc (lambda (resume)
(set! k resume)
return))))
x))))
;; ordering explicitly introduced so I can mutated return
(return x)))
;; remember kids, r5rs scheme does not specify left-to-right
;; ordering for defines, or function application.
(discriminator)
(let* ((r1 (call/cc k))
(r2 (call/cc k)))
(eqv? r1 r2)))
(define (test1 get)
(let ((v (make-vector 2 #f)))
(vector-set! v 0 (get 0))
(vector-set! v 1 (get 1))
v))
(define (test2 get)
(let* ((a (get 0))
(b (get 1)))
(vector a b)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment