Don&#39;t apologize, I&#39;m very grateful for your help :-)<div>I&#39;ll take a look at the paper and the documentation</div><div><br></div><div>Cheers<br><br><div class="gmail_quote">2011/8/11 Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Well, continuation-marks are a lower-level, lighter-weight construct<br>
than parameters.<br>
<br>
Sometimes you have to use parameters because that&#39;s the api you get to<br>
work with (current-output-port being a popular example of that) and<br>
sometimes you have to use continuation-marks because that&#39;s the api<br>
you get to work with (the exn field that you&#39;re using, altho this is a<br>
much rarer case).<br>
<br>
Featurewise, parameters have guards, they work with parameterizations,<br>
they can be set directly (as opposed to stored as part of a<br>
continuation) and they behave differently write to the interactions<br>
with threads. Continuation marks don&#39;t do any of that.<br>
<br>
Overall, I guess, the best answer is &quot;it depends&quot; and I&#39;m sorry to say<br>
it, but I think that your best bet is to study the constructs yourself<br>
to try to understand them.<br>
<br>
Matthew recently wrote an excellent note about the interactions with<br>
eval and namespaces and why you should or shouldn&#39;t use one and I<br>
would love to be able to provide you with the same, but I don&#39;t have<br>
such an essay yet. I&#39;m sorry. The best I can offer you is the<br>
documentation and this paper:<br>
<br>
  <a href="http://www.eecs.northwestern.edu/~robby/pubs/papers/icfp2007-fyff.pdf" target="_blank">http://www.eecs.northwestern.edu/~robby/pubs/papers/icfp2007-fyff.pdf</a><br>
<br>
I apologize in advance if this is too researchy for what you&#39;re looking for.<br>
<br>
Perhaps others have more practical experience and would like to chime in.<br>
<br>
Robby<br>
<br>
On Thu, Aug 11, 2011 at 8:55 AM, Ismael Figueroa Palet<br>
<div><div></div><div class="h5">&lt;<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;ll try that in my particular case, however, what is the main difference<br>
&gt; and how do I decide whether to use continuation marks or parameters?? what<br>
&gt; are the advantages/disadvantages of choosing one over the other?<br>
&gt; Thanks<br>
&gt;<br>
&gt; 2011/8/10 Robby Findler &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt; A parameter is implementing using continuation marks (and other things).<br>
&gt;&gt;<br>
&gt;&gt; The short version of the story is that you want to say<br>
&gt;&gt;<br>
&gt;&gt;  (with-continuation-mark &#39;key &#39;value e)<br>
&gt;&gt;<br>
&gt;&gt; instead of<br>
&gt;&gt;<br>
&gt;&gt;  (parameterize ([param &#39;value]) e)<br>
&gt;&gt;<br>
&gt;&gt; and then when the exception is raised, you&#39;ll find that it has a field<br>
&gt;&gt; that holds the continuation marks in effect at the point where the<br>
&gt;&gt; value was raised. You can then use that to extract the &#39;value you<br>
&gt;&gt; stored with the &#39;key.<br>
&gt;&gt;<br>
&gt;&gt; There is more information in the manuals about these primitives that<br>
&gt;&gt; you&#39;ll want to read but don&#39;t hesitate to ask if you get stuck.<br>
&gt;&gt; (Overall, it sounds like it should be much easier to use this approach<br>
&gt;&gt; than the one you were thinking of before.)<br>
&gt;&gt;<br>
&gt;&gt; Robby<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Aug 10, 2011 at 11:25 AM, Ismael Figueroa Palet<br>
&gt;&gt; &lt;<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi again Robby,<br>
&gt;&gt; &gt; I really don&#39;t know much about continuation marks. I want the value A to<br>
&gt;&gt; &gt; be<br>
&gt;&gt; &gt; embedded on the exception structure, because I check that value with a<br>
&gt;&gt; &gt; modified with-handlers macro. I thought that using parameters A will<br>
&gt;&gt; &gt; behave<br>
&gt;&gt; &gt; like a dynamically scoped identifier.<br>
&gt;&gt; &gt; What are the differences, if any, of using continuation marks versus<br>
&gt;&gt; &gt; using<br>
&gt;&gt; &gt; parameters??<br>
&gt;&gt; &gt; Thanks<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 2011/8/9 Robby Findler &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Could you put the value into a continuation mark and then, when you<br>
&gt;&gt; &gt;&gt; catch the exception, look in the continuation marks to get it out<br>
&gt;&gt; &gt;&gt; again?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Robby<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Tue, Aug 9, 2011 at 3:56 PM, Ismael Figueroa Palet<br>
&gt;&gt; &gt;&gt; &lt;<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; 2011/8/9 Robby Findler &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; On Tue, Aug 9, 2011 at 3:01 PM, Ismael Figueroa Palet<br>
&gt;&gt; &gt;&gt; &gt;&gt; &lt;<a href="mailto:ifigueroap@gmail.com">ifigueroap@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; 2011/8/4 Robby Findler &lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; The blame assignment stuff is wired pretty deep into the contract<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; system. There isn&#39;t currently any way to change that aspect of<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; the<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; system without doing what you&#39;ve done below.<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; If you can say more about how/why you want to change it, tho,<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; there<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; maybe some extension to the current API that would work for you<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; and<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;&gt; that we&#39;d be willing to maintain going forward.<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; I defined a new-exn struct to represent exceptions and defined a<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; raise<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; macro<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; that wraps Racket&#39;s raise to throw a new-exn value. Also, I need<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; raise<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; the exception thrown by raise-blame-error inside a parameterize<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; expression.<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; I want to access and modify a parameter that will be used to<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; construct<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; the<br>
&gt;&gt; &gt;&gt; &gt;&gt; &gt; new-exn value.<br>
&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;&gt; It sounds like you&#39;re maybe adding a field to the exn record? Can<br>
&gt;&gt; &gt;&gt; &gt;&gt; you<br>
&gt;&gt; &gt;&gt; &gt;&gt; say more about what that field is and how you compute its value? (Or<br>
&gt;&gt; &gt;&gt; &gt;&gt; if I&#39;m just wrong about that?)<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Yes, the end result I want is to tag the exn record with a value.<br>
&gt;&gt; &gt;&gt; &gt; That<br>
&gt;&gt; &gt;&gt; &gt; value<br>
&gt;&gt; &gt;&gt; &gt; is stored in a parameter A. I want to make raise-blame-error to<br>
&gt;&gt; &gt;&gt; &gt; always<br>
&gt;&gt; &gt;&gt; &gt; raise<br>
&gt;&gt; &gt;&gt; &gt; an exception tagged with A+1.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt; &gt; Ismael<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Ismael<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Ismael<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Ismael<br><br>
</div>