This page is part of the web mail archives of SRFI 39 from before July 7th, 2015. The new archives for SRFI 39 contain all messages, not just those from before July 7th, 2015.
> Is it really necessary for SRFI-39 to specify this? As per R5RS `delay' > and `force' are defined clearly without capturing the dynamic context. > So in the obvious implementation of `with-output-to-file' (via `dynamic-wind') > promises would not retain the dynamic environment and your example > would not behave as you intended. > > Moreover, it might be useful to change the context in which the force > happens (say, I'd want to redirect output to a log file, or a custom > `tee' port). I think this SRFI has to specify what happens with DELAY, because DELAY is required by R5RS. Doing nothing special as you propose would not be modular. Let's call the piece of code that creates a promise the "creator" and the piece of code that forces it the "forcer". Then in your approach the creator needs to be aware of the forcer(s) and the forcer(s) need to be aware of the creator (because the dynamic environment of the creator and forcer is not the same in general). This is not modular. Note that the lambda form does not close over the dynamic environment so why should it be different from delay? Well if you did this the "dynamic environment" would in fact be the lexical environment so you would lose all the benefits of dynamic binding. When one writes a function with lambda there is an expectation that the dynamic environment is abstracted over. However when using a DELAY the expectation is that only the evaluation time is changed, not the computation being performed (unless side-effects are performed that expose the evaluation order). Marc