On 4-Mar-08, at 6:05 PM, David St-Hilaire wrote:
Ok Thx! But having x defined as a global variable, and thus being present in the lexical scoping of f when it is defined doesn't feel much like dynamic bindincs, doesn't it? If we do something like:
(define x (make-parameter #f))
(define (f) (pp (x)))
(set! x 'oups) (parameterize ((x 10)) (f))
results in an error, but doesn't dynamic scoping would permit something like that?
A parameter object is not a variable, it is an object... You can bind it to a variable (global or not), but that's just a way to give it a "name" so that you can refer to it in the rest of your code. So when you do
(define x (make-parameter #f))
all code that can see the variable x has access to the parameter object. You could use a local variable as in
(let ()
(define x (make-parameter #f))
...)
and then only the body of the let has access to the parameter object. This is not a bug... it's a feature (because you have more control than a globally visible "dynamically scoped variable").
The "dynamic binding" aspect is obtained with the (parameterize ...) form, which is the analog of your (dynamic-let ...).
This is a bit amusing because in earlier versions of Gambit, "dynamic- let" was supported with the semantics you seem to expect.
Marc
Afficher les réponses par date