Has something changed in how `error` works across modules? This code that I 
used last year without trouble seems to run into trouble now.

Here's the code all in one module:

#lang racket

(provide yield resume)

(define resumer #f)

(define (yield)
  (let/cc k
    (set! resumer k)
    (error 'yield "yielding computation")))

(define (resume)
  (resumer 'dummy))

(define (fact n)
  (if (= n 0)
      1
      (begin
        (when (= (remainder n 10) 0)
          (yield))
        (* n (fact (- n 1))))))

It results in the following (desired) interaction:

> (fact 10)
. . yield: yielding computation
> (resume)
3628800

But now I'm going to remove the definition of `fact` and put it in another 
module, saving the remainder as `yielder.rkt`:

#lang racket

(require "yielder.rkt")

(define (fact n)
  (if (= n 0)
      1
      (begin
        (when (= (remainder n 10) 0)
          (yield))
        (* n (fact (- n 1))))))

Now I get the following error. What should I be doing instead?

> (fact 10)
-- #(struct:exn:fail:contract "vector-ref: contract violation\n  expected: 
vector?\n  given: '((error 'yield \"yielding computation\") 
#<path:/Users/sk/Desktop/yielder.rkt> 10 4 113 37)\n  argument position: 
1st\n  other arguments...:\n   0" #<continuation-mark-set>)
  (errortrace-stack-item->srcloc . #(struct:srcloc 
#<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/stack-checkpoint.rkt> 168 0 6297 
203))
  (pick-first-defs . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/stack-checkpoint.rkt> 331 0 13000 
425))
  (get-exn-source-locs . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/stack-checkpoint.rkt> 585 0 23184 
391))
  (#f . #(struct:srcloc #<path:/Applications/Racket 
v7.8/collects/racket/contract/private/arrow-val-first.rkt> 486 18 20735 32))
  (error-display-handler/stacktrace . #(struct:srcloc 
#<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/debug.rkt> 362 2 15076 2612))
  (call-with-exception-handler . #(struct:srcloc 
#<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt> 
266 2 9251 256))
  (fact . #(struct:srcloc #<path:/Users/sk/Desktop/client.rkt> 5 0 40 139))
  (eval-one-top . #f)
  (call-with-exception-handler . #(struct:srcloc 
#<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt> 
266 2 9251 256))
  (loop . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/rep.rkt> 1210 24 50804 979))
  (call-with-break-parameterization . #(struct:srcloc 
#<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt> 
148 2 4909 517))
  (#f . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/rep.rkt> 1180 9 49153 5062))
  (#f . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/drracket/drracket/private/rep.rkt> 1493 15 64385 1548))
  (#f . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 435 6 19067 1056))
  (#f . #(struct:srcloc #<path:/Applications/Racket 
v7.8/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 486 32 21054 120))
  (call-with-break-parameterization . #(struct:srcloc 
#<path:/Applications/Racket v7.8/collects/racket/private/more-scheme.rkt> 
148 2 4909 517))
  (eventspace-handler-thread-proc . #(struct:srcloc 
#<path:/Applications/Racket 
v7.8/share/pkgs/gui-lib/mred/private/wx/common/queue.rkt> 370 11 16515 690))
exception raised by error display handler: vector-ref: contract violation
  expected: vector?
  given: '((error 'yield "yielding computation") 
#<path:/Users/sk/Desktop/yielder.rkt> 10 4 113 37)
  argument position: 1st
  other arguments...:
   0; original exception raised: yield: yielding computation

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/6aa1ad8a-9f1a-4c11-8b75-5ed3ca09797dn%40googlegroups.com.

Reply via email to