On 23 March 2013 18:41, Stefan Israelsson Tampe <[email protected]> wrote: > Consider this simple exmple with fluids and reodos via propmts, > > (define (f x) > (let ((s (make-fluid 0))) > (with-fluids ((s 0)) > (let lp ((i 0)) > (cond ((>= i 100) (fluid-ref s)) > ((= i 50) (abort-to-prompt 'tag) (lp (+ i 1))) > (else (fluid-set! s (+ (fluid-ref s) i)) > (lp (+ i 1)))))))) > > (define k (call-with-prompt 'tag (lambda () (f 1)) (lambda (k . l) > k))) > > Then we will get in guile-2.0 pretty resent git version > scheme@(guile-user)> (k) > $1 = 4900 > scheme@(guile-user)> (k) > $2 = 8575 >
What values do you expect from successive calls to K? > The reason is that when the with-fluid returns normally it does a full > swap. It should only do half a swap e.g. restore the old value of the > fluid and not store the current which is of non use because it can not > be reached anymore and it contaminates the continuation k. K captures S, a fluid, along with the dynamic extent. There is only a single dynamic extent to which K resumes, and only one value associated to the fluid S within that. Subsequent calls to K do not generate a new dynamic extent, so it makes sense that modifications to the fluids value persist. This example behaives as expected according to my understanding of fluids. Am I missing something?
