Robby,<br><br>The solution you gave works with what I want to do. Thanks!<br><br>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.<br>
<br>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)?<br><br>It would be something like:<br>
<br>(parameterize ([param value #:also-as-continuation-mark]) e)<br><br>So if I do (current-continuation-mark 'param) it will return the adequate value, in addition to being accessible as a parameter. <br><br>Thanks again!<br>
<br>--<br>Ismael<br><br><div class="gmail_quote">2011/8/10 Robby Findler <span dir="ltr"><<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
A parameter is implementing using continuation marks (and other things).<br>
<br>
The short version of the story is that you want to say<br>
<br>
(with-continuation-mark 'key 'value e)<br>
<br>
instead of<br>
<br>
(parameterize ([param 'value]) e)<br>
<br>
and then when the exception is raised, you'll find that it has a field<br>
that holds the continuation marks in effect at the point where the<br>
value was raised. You can then use that to extract the 'value you<br>
stored with the 'key.<br>
<br>
There is more information in the manuals about these primitives that<br>
you'll want to read but don't hesitate to ask if you get stuck.<br>
(Overall, it sounds like it should be much easier to use this approach<br>
than the one you were thinking of before.)<br>
<br>
Robby<br>
<br>
On Wed, Aug 10, 2011 at 11:25 AM, Ismael Figueroa Palet<br>
<div><div></div><div class="h5"><<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>
> Hi again Robby,<br>
> I really don't know much about continuation marks. I want the value A to be<br>
> embedded on the exception structure, because I check that value with a<br>
> modified with-handlers macro. I thought that using parameters A will behave<br>
> like a dynamically scoped identifier.<br>
> What are the differences, if any, of using continuation marks versus using<br>
> parameters??<br>
> Thanks<br>
><br>
> 2011/8/9 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>
>><br>
>> Could you put the value into a continuation mark and then, when you<br>
>> catch the exception, look in the continuation marks to get it out<br>
>> again?<br>
>><br>
>> Robby<br>
>><br>
>> On Tue, Aug 9, 2011 at 3:56 PM, Ismael Figueroa Palet<br>
>> <<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>
>> ><br>
>> ><br>
>> > 2011/8/9 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>
>> >><br>
>> >> On Tue, Aug 9, 2011 at 3:01 PM, Ismael Figueroa Palet<br>
>> >> <<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>> wrote:<br>
>> >> > 2011/8/4 Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>><br>
>> >> >><br>
>> >> >> The blame assignment stuff is wired pretty deep into the contract<br>
>> >> >> system. There isn't currently any way to change that aspect of the<br>
>> >> >> system without doing what you've done below.<br>
>> >> >><br>
>> >> >> If you can say more about how/why you want to change it, tho, there<br>
>> >> >> maybe some extension to the current API that would work for you and<br>
>> >> >> that we'd be willing to maintain going forward.<br>
>> >> ><br>
>> >> > I defined a new-exn struct to represent exceptions and defined a<br>
>> >> > raise<br>
>> >> > macro<br>
>> >> > that wraps Racket's raise to throw a new-exn value. Also, I need to<br>
>> >> > raise<br>
>> >> > the exception thrown by raise-blame-error inside a parameterize<br>
>> >> > expression.<br>
>> >> > I want to access and modify a parameter that will be used to<br>
>> >> > construct<br>
>> >> > the<br>
>> >> > new-exn value.<br>
>> >><br>
>> >> It sounds like you're maybe adding a field to the exn record? Can you<br>
>> >> say more about what that field is and how you compute its value? (Or<br>
>> >> if I'm just wrong about that?)<br>
>> ><br>
>> > Yes, the end result I want is to tag the exn record with a value. That<br>
>> > value<br>
>> > is stored in a parameter A. I want to make raise-blame-error to always<br>
>> > raise<br>
>> > an exception tagged with A+1.<br>
>> ><br>
>> > --<br>
>> > Ismael<br>
>> ><br>
>> ><br>
><br>
><br>
><br>
> --<br>
> Ismael<br>
><br>
><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Ismael<br><br>