<br><br><div class="gmail_quote">On Thu, May 24, 2012 at 10:45 PM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org" target="_blank">eli@barzilay.org</a>&gt;</span> wrote: <br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">


<div class="im"><br>
&gt;   (string-index str sub [start 0] [end (string-length str)])<br>
&gt;     Looks for occurrences of `sub&#39; in `str&#39;, returns the index if<br>
&gt;     found, #f otherwise.  [*2*] I&#39;m not sure about the name, maybe<br>
&gt;     `string-index-of&#39; is better?<br></div></blockquote><div><br>Maybe `string-find&#39;?<br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="im">
&gt;   (list-index list elt)<br>
&gt;     Looks for `elt&#39; in `list&#39;.  This is a possible extension for<br>
&gt;     `racket/list&#39; that would be kind of obvious with adding the above.<br>
&gt;     [*3*] I&#39;m not sure if it should be added, but IIRC it was<br>
&gt;     requested a few times.  If it does get added, then there&#39;s another<br>
&gt;     question for how far the analogy goes: [*3a*] Should it take a<br>
&gt;     start/end index too?  [*3b*] Should it take a list of elements and<br>
&gt;     look for a matching sublist instead (which is not a function that<br>
&gt;     is common to ask for, AFAICT)?<br></div></blockquote><div><br>3b: I think that&#39;s over-complicating things, personally.<br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="im">

</div> 
 2. Another subtle point is what should these return:<br>
<br>
       (string-trim &quot;aaa&quot; &quot;aa&quot;)<br>
       (string-trim &quot;ababa&quot; &quot;aba&quot;) </blockquote><div> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

     After deliberating on that, I eventually made it return &quot;&quot;<br>
     because it seems like that would be more expected.  </blockquote><div><br>That this could return &quot;&quot; surprised me. The intuitive behavior to me is 
the following: If you remove &quot;aa&quot; from &quot;aaa&quot;, you get &quot;a&quot;, and if you 
repeat it (from either side), you don&#39;t match and return &quot;a&quot;.<br>
This relies on an occidental left-&gt;right preference though.<br>
<br>
But as you say, these are rare cases, so it could well be left as 
&quot;unspecified&quot; or specified in the simplest way to implement, as long as 
it is well documented?<br><br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(But that&#39;s<br>
     really a subtle point, since multi-character string separators<br>
     are very rare anyway.)  I also looked into several of these<br>
     functions, but there&#39;s no precedent that I&#39;ve seen either way.<br>
     (In many cases it uses a regexp or uses the `sep&#39; string as a bag<br>
     of characters.)<br>
<br>
     As a corollary of this, I thought that it might also mean that<br>
     this should happen:<br>
<br>
       (string-split &quot;x---y---z&quot; &quot;--&quot;) =&gt; &#39;(&quot;x&quot; &quot;y&quot; &quot;z&quot;)<br>
<br>
     but in this case it looks like this wouldn&#39;t be expected.<br></blockquote><div><br>Indeed.<br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">


     Perhaps a hand-wavy proof of this is that coding this behavior<br>
     would take a little effort (need to look for all occurrences of<br>
     the pattern) whereas in the `string-trim&#39; case the above is very<br>
     easy (find the start and end, return &quot;&quot; if start &gt;= end). </blockquote><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
* (string-split str [sep #px&quot;\\s+&quot;] #:trim? [trim? #t] #:repeat? [+? #f])<br>
<br>
  As discussed.<br>
<br>
* (string-normalize-spaces str [sep #px&quot;\\s+&quot;] [space &quot; &quot;]<br>
                           #:trim? [trim? #t] #:repeat? [+? #f])<br></blockquote><div><br>Side comment: If it&#39;s possible, formatting the signature like this in the docs could be a good idea: put all the keyword arguments on another line, so that the most important and often used options are put forward.  I think that might help newbies to understand the question (keywords can be a bit frightening maybe? (not sure)).<br>

 <br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> 
 I ended up keeping the name of this.  Also, it&#39;s easy to implement<br>
  directly as<br>
<br>
    (string-join (string-split str sep ...) space)<br></blockquote><div><br>That&#39;s a good sign that the functions have the correct (default) behavior.<br><br></div></div>Looking forward to use all these!<br><br>Laurent<br>