<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><blockquote type="cite"><div><br>Discriminated unions are the category-theoretic dual of cartesian <br>products. &nbsp;If you find one useful, chances are you need the other, too.<br><br></div></blockquote><div><br></div><div>Can you please elaborate?</div><div><br></div><div><br></div><blockquote type="cite"><div><blockquote type="cite"><font class="Apple-style-span" color="#000000"><br></font></blockquote>You might be better off with CAML than Haskell, if you want to make <br>smaller steps in that direction. &nbsp;CAML is not such a radical shift into <br>lazy evaluation.<br></div></blockquote><div><br></div><div>I'm not totally unfamiliar with lazy evaluation (the concept, at least, practice will be a different matter I guess :-;), and having already started with Haskell (several times... - I've always been forced to postpone it somehow) I think I'd like to stick with it, not begin yet another thing...</div><div><br></div><blockquote type="cite"><div><br>Also, learn some elementary category theory (that found in the first <br>chapter or two of *any* book on the subject will be enough to <br></div></blockquote><div><br></div><div><br></div><div>Yes, this topic really is on my "books queue". Only for me, as a mathematically totally untrained person, with no one to ask, it does make a difference which book I read &nbsp;- I fully realized this with John Fraleigh's "Abstract Algebra", which I've nearly finished by now and which I'm really enthusiastic about. For sure it may lack "rigor" as some critique on amazon was saying, but it really makes me understand the concepts. Could you perhaps recommend a book on category theory that emphasizes understanding in a similar way?</div><div><br></div><div>In general, your post seems to suggest that learning about theoretical concepts and practical programming need not be so tightly coupled... which is in accordance with my realizing that perhaps using typed scheme for my project (of implementing relational algebra) might render things unnecessarily complicated (as I have to, in a way, implement types myself, and am using scheme functions on the other hand, which leads to serious typing problems). (Plus, I think I cannot go on bugging Sam with so many questions :-;). What I mean to say,- I should choose the easiest tool for the job and not make things overly complicated by trying to make the scheme code as haskell-like as possible :-;</div><div><br></div><div><br></div><div>Ciao,</div><div>Sigrid</div><div><br></div><div><br></div><div><br></div><br><blockquote type="cite"><div><br>------------------------------<br><br>Message: 3<br>Date: Thu, 3 Jun 2010 22:22:41 -0400<br>From: Matthias Felleisen &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt;<br>Subject: Re: [plt-scheme] Fun with Unicode and delimited continuations<br>To: John Clements &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt;<br>Cc: David Herman &lt;<a href="mailto:dherman@ccs.neu.edu">dherman@ccs.neu.edu</a>&gt;, Eli Barzilay<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt;,<span class="Apple-tab-span" style="white-space:pre">        </span><a href="mailto:plt-scheme@list.cs.brown.edu">plt-scheme@list.cs.brown.edu</a>, Doug Orleans<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;<a href="mailto:dougorleans@gmail.com">dougorleans@gmail.com</a>&gt;<br>Message-ID: &lt;<a href="mailto:84F5E3D8-28D2-44FB-983D-02D54BA33543@ccs.neu.edu">84F5E3D8-28D2-44FB-983D-02D54BA33543@ccs.neu.edu</a>&gt;<br>Content-Type: text/plain; charset=us-ascii<br><br><br>On Jun 3, 2010, at 7:47 PM, John Clements wrote:<br><br><blockquote type="cite"><br></blockquote><blockquote type="cite">On Jun 3, 2010, at 4:33 PM, Matthias Felleisen wrote:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Can you return them from the function that grabs them (in Python)? <br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Can you resume the function once it has transfered control somewhere else? <br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Can you store the continuations in some vector? <br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">(I don't know the answers, but these are some of the things one can do with 1st-class values.) <br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Yes:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">def grabK () : yield 1 ; print "running..." ; yield 2<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">def grabAFewKonts () :<br></blockquote><blockquote type="cite"> &nbsp;&nbsp;return [grabK () , grabK ()]<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">a = grabAFewKonts();<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">f = a[0];<br></blockquote><blockquote type="cite">g = a[1];<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">print(f.next());<br></blockquote><blockquote type="cite">print(f.next());<br></blockquote><blockquote type="cite">print(g.next());<br></blockquote><br><br>Interesting perception. What you are storing are not the continuations but the suspended generators. (Think of grabK() as the creation of a generator.) You could do that in Simula 67, and what you need for that is a pair of control stacks, not a continuation tree. <br><br>So here is the next question then: <br><br>Can you invoke them a __second__ time and get an error message about a second use? <br>If you can't, they aren't real one-shot continuations. To be precise, you have no <br>observation to prove that they are continuations. <br><br>In the days of denotational semantics, you might have said that you can denote them but not express them (or backwards, Mitch would know). <br><br>-- Matthias<br><br><br><br><br><br><br><br>------------------------------<br><br>Message: 4<br>Date: Thu, 3 Jun 2010 23:00:43 -0400<br>From: Sam Tobin-Hochstadt &lt;<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a>&gt;<br>Subject: Re: [plt-scheme] Fun with Unicode and delimited continuations<br>To: Matthias Felleisen &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt;<br>Cc: David Herman &lt;<a href="mailto:dherman@ccs.neu.edu">dherman@ccs.neu.edu</a>&gt;, Eli Barzilay<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt;,<span class="Apple-tab-span" style="white-space:pre">        </span>John Clements &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt;,<br><span class="Apple-tab-span" style="white-space:pre">        </span><a href="mailto:plt-scheme@list.cs.brown.edu">plt-scheme@list.cs.brown.edu</a>,<span class="Apple-tab-span" style="white-space:pre">        </span>Doug Orleans &lt;<a href="mailto:dougorleans@gmail.com">dougorleans@gmail.com</a>&gt;<br>Message-ID:<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;<a href="mailto:AANLkTinzul99c8CtCpy3CmITVoFieoC-MbEHbUkwY8z-@mail.gmail.com">AANLkTinzul99c8CtCpy3CmITVoFieoC-MbEHbUkwY8z-@mail.gmail.com</a>&gt;<br>Content-Type: text/plain; charset=ISO-8859-1<br><br>On Thu, Jun 3, 2010 at 10:22 PM, Matthias Felleisen<br>&lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:<br><blockquote type="cite">You could do that in Simula 67, and what you need for that is a pair of control stacks, not a continuation tree.<br></blockquote><br>There's a paper in TFP 2010 by Konrad Anton and Peter Thiemann that<br>discusses these under the rubric of coroutines, with history going<br>back to Simula.<br><br>-- <br>sam th<br><a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br><br><br>------------------------------<br><br>Message: 5<br>Date: Wed, 02 Jun 2010 22:17:21 -0700<br>From: George Oliver &lt;georgeolivergo@gmail.com&gt;<br>Subject: [plt-scheme] MUD servers?<br>To: plt-scheme@list.cs.brown.edu<br>Message-ID: &lt;4C073AE1.7080903@gmail.com&gt;<br>Content-Type: text/plain; charset=ISO-8859-1; format=flowed<br><br>hi,<br><br>While there are a few threads on the list that mention MUDs, and several <br>PLT-Scheme muds referenced in Google results, it seems like most of the <br>links to code or running games are long dead. Does anyone have current <br>links to PLT-Scheme MUD info?<br><br>As a long-time MUDder and beginning Schemer I think this would be a fun <br>project to tackle.<br><br><br>thanks, George<br><br><br>------------------------------<br><br>Message: 6<br>Date: Thu, 03 Jun 2010 23:24:21 -0700<br>From: Synx &lt;plt@synx.us.to&gt;<br>Subject: Re: [plt-scheme] MUD servers?<br>To: PLT-Scheme Mailing List &lt;plt-scheme@list.cs.brown.edu&gt;<br>Message-ID: &lt;4C089C15.2040102@synx.us.to&gt;<br>Content-Type: text/plain; charset=ISO-8859-1<br><br><br>On 06/02/2010 10:17 PM, George Oliver wrote:<br><blockquote type="cite">hi,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">While there are a few threads on the list that mention MUDs, and several<br></blockquote><blockquote type="cite">PLT-Scheme muds referenced in Google results, it seems like most of the<br></blockquote><blockquote type="cite">links to code or running games are long dead. Does anyone have current<br></blockquote><blockquote type="cite">links to PLT-Scheme MUD info?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">As a long-time MUDder and beginning Schemer I think this would be a fun<br></blockquote><blockquote type="cite">project to tackle.<br></blockquote><br>I thought it would be fun to tackle too. Then I realized how PLT does<br>such wonderful optimization by not allowing you to remove modules<br>explicitly, but that doesn't cater well to a situation where you are<br>going in and out of different rooms and player contexts and such. Then I<br>learned just how convoluted making custom languages is using PLT, which<br>until last week or so had no tutorial how to do so at all. And finally I<br>ran into the problems facing sandboxes, how to get them to a state where<br>you can actually pass s-expressions to them and not have them error out<br>claiming they're trying to hax your boxes.<br><br>It turned out to be a lot more complicated than I imagined at first...<br>probably mostly my fault since I seem to overcomplicate everything. I<br>kind of concluded in the end that getting something working isn't worth<br>the effort and I'd just use LambdaMOO instead (which ironically does not<br>support any form of LISP at all). Then I just got tired of trying to<br>make a convincing text game at all. Then I combed my hair over one eye<br>and started wearing black clothing with striped sleeves everywhere.<br><br>In short, I'm still working on it. Slowly. Got other priorities though.<br>You're free to look at what I got:<br>https://synx.us.to/code/mu/<br><br>The database thing is the trickiest part that actually works. I'm not<br>sure I could get good performance using a relational SQL database<br>though, and it'd be better to represent the data as it actually is<br>instead of trying to strongarm it into some kind of human readable query<br>language like sqlite wants me to.<br><br>Oh also,<br>http://pre.plt-scheme.org/docs/html/guide/languages.html<br><br><br>End of plt-scheme Digest, Vol 58, Issue 14<br>******************************************<br></div></blockquote></div><br></body></html>