I think it would work, more or less. However, I think that if "someone" change the parameter only and not update the continuation mark (either by mistake, malice, or other reasons), things would not work. That is why I suggested that this fictiocious mechanism needs to keep track of the changes and keep the values synced.
However, for my current purposes the macro will be ok! Cheers 2011/10/25 Robby Findler <ro...@eecs.northwestern.edu> > If you are willing to change the existing uses of parameterize, then you > could use a macro to introduce a continuation mark along with the parameter > setting. Would that work? > > Robby > > > On Tuesday, October 25, 2011, Ismael Figueroa Palet <ifiguer...@gmail.com> > wrote: > > Robby, > > > > The solution you gave works with what I want to do. Thanks! > > > > The only issue is that the rest of the codebase is already assuming that > the values are stored using parameterize, so I need to change all those > points to use with-continuation-mark in addition to parameterize. > > > > Is there any way to configure parameterize so it also introduces a > continuation mark with the same name, and make sure the values are always > synced (and so it is captured when exceptions are raised)? > > > > It would be something like: > > > > (parameterize ([param value #:also-as-continuation-mark]) e) > > > > So if I do (current-continuation-mark 'param) it will return the adequate > value, in addition to being accessible as a parameter. > > > > Thanks again! > > > > -- > > Ismael > > > > 2011/8/10 Robby Findler <ro...@eecs.northwestern.edu> > > > > A parameter is implementing using continuation marks (and other things). > > > > The short version of the story is that you want to say > > > > (with-continuation-mark 'key 'value e) > > > > instead of > > > > (parameterize ([param 'value]) e) > > > > and then when the exception is raised, you'll find that it has a field > > that holds the continuation marks in effect at the point where the > > value was raised. You can then use that to extract the 'value you > > stored with the 'key. > > > > There is more information in the manuals about these primitives that > > you'll want to read but don't hesitate to ask if you get stuck. > > (Overall, it sounds like it should be much easier to use this approach > > than the one you were thinking of before.) > > > > Robby > > > > On Wed, Aug 10, 2011 at 11:25 AM, Ismael Figueroa Palet > > <ifiguer...@gmail.com> wrote: > >> Hi again Robby, > >> I really don't know much about continuation marks. I want the value A to > be > >> embedded on the exception structure, because I check that value with a > >> modified with-handlers macro. I thought that using parameters A will > behave > >> like a dynamically scoped identifier. > >> What are the differences, if any, of using continuation marks versus > using > >> parameters?? > >> Thanks > >> > >> 2011/8/9 Robby Findler <ro...@eecs.northwestern.edu> > >>> > >>> Could you put the value into a continuation mark and then, when you > >>> catch the exception, look in the continuation marks to get it out > >>> again? > >>> > >>> Robby > >>> > >>> On Tue, Aug 9, 2011 at 3:56 PM, Ismael Figueroa Palet > >>> <ifiguer...@gmail.com> wrote: > >>> > > >>> > > >>> > 2011/8/9 Robby Findler <ro...@eecs.northwestern.edu> > >>> >> > >>> >> On Tue, Aug 9, 2011 at 3:01 PM, Ismael Figueroa Palet > >>> >> <ifiguer...@gmail.com> wrote: > >>> >> > 2011/8/4 Robby Findler <ro...@eecs.northwestern.edu> > >>> >> >> > >>> >> >> The blame assignment stuff is wired pretty deep into the contract > >>> >> >> system. There isn't currently any way to change that aspect of > the > >>> >> >> system without doing what you've done below. > >>> >> >> > >>> >> >> If you can say more about how/why you want to change it, tho, > there > >>> >> >> maybe some extension to the current API that would work for you > and > >>> >> >> that we'd be willing to maintain going forward. > >>> >> > > >>> >> > I defined a new-exn struct to represent exceptions and defined a > >>> >> > raise > >>> >> > macro > >>> >> > that wraps Racket's raise to throw a new-exn value. Also, I need > to > >>> >> > raise > >>> >> > the exception thrown by raise-blame-error inside a parameterize > >>> >> > expression. > >>> >> > I want to access and modify a parameter that will be used to > >>> >> > construct > >>> >> > the > >>> >> > new-exn value. > >>> >> > >>> >> It sounds like you're maybe adding a field to the exn record? Can > you > >>> >> say more about what that field is and how you compute its value? (Or > >>> >> if I'm just wrong about that?) > >>> > > >>> > Yes, the end result I want is to tag the exn record with a value. > That > >>> > value > >>> > is stored in a parameter A. I want to make raise-blame-error to > always > >>> > raise > >>> > an exception tagged with A+1. > >>> > > >>> > -- > >>> > Ismael > >>> > > >>> > > >> > >> > >> > >> -- > >> Ismael > >> > >> > > > > -- > > Ismael > > > > > -- Ismael
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users