BACKGROUND:

Per the documentation:

with-continuation-mark causes a key to be associated with a binding within a continuation frame

continuation-mark-set->list returns the binding(s) associated with that particular key, for any given continuation-mark-set

while

continuation-mark-set-first returns the first (innermost) binding associated with a particular key

QUESTIONABLE  BEHAVIOR

The issue is:

if a key is reused, the only binding continuation-mark-set->list returns is the innermost binding.

So continuation-mark-set->list could only possibly return **one** value

and

continuation-mark-set-first  appears redundant

Is that the desired behavior? I would have expected continuation-mark-set->list to return all the bindings for a particular key.

Additionally, I suspect continuation-mark-set->context has to be implemented using the 'return a list of all bindings for a single key' behavior, since the documentation indicates it uses a single private key.


EXAMPLE

#lang racket
(with-continuation-mark 'global  'outermost-value
  (let/cc k-outer
    (with-continuation-mark 'global 'middle-value
      (let/cc k-inner
        (with-continuation-mark 'global 'inner-value (begin
(display (continuation-mark-set->list (current-continuation-marks) 'global))
                                                       (newline)
(display (continuation-mark-set->list (continuation-marks k-inner) 'global))
                                                       (newline)
(display (continuation-mark-set->list (continuation-marks k-outer) 'global))
         ))))))

;Returns

;(inner-value)

;(middle-value)

;(outermost-value)

but I would have expected:

;Returns

;(inner-value) (middle-value) (outermost-value)

;(middle-value) (outermost-value)

;(outermost-value)


Thanks very much for looking at this.

R/

Zack
____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to