<div dir="ltr">Ted: here&#39;s the counter-challenge.<div><br></div><div>func emptyStringPrefixChallenge(inputString: String) -&gt; Bool</div><div>{</div><div>  let prefixedString = &quot;&quot; + inputString</div><div>  return (prefixedString == inputString)</div><div>}</div><div><br></div><div>The challenge: find a value for inputString such that this function returns false. Because otherwise, if it returns true for every possible value of inputString, then every String must be acknowledged as having the empty string as a prefix.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 21, 2016 at 7:24 AM, David Hart via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">This is the best argument: lets not make the behaviour surprising to people coming from other languages out there.<div><div class="h5"><div><br><div><blockquote type="cite"><div>On 21 Jul 2016, at 04:57, Jaden Geller via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word">This discussion is getting out of control. Both of these functions have mathematical precedent as well as consistent behaviors in other languages. Observe:<div><br></div><div>Python: `&quot;hello world&quot;.startswith(&quot;&quot;)` =&gt; `True`</div><div>Java: `&quot;hello world&quot;.startsWith(&quot;&quot;)` =&gt; `true`</div><div>JavaScript: `&quot;hello world&quot;.startsWith(&quot;&quot;)` =&gt; `true`</div><div>Ruby: `&quot;hello world&quot;.start_with? &quot;&quot;` =&gt; `true`</div><div>Rust: `&quot;hello world&quot;.starts_with(&quot;&quot;)` =&gt; `true`</div><div>Go: `strings.HasPrefix(&quot;hello world&quot;, &quot;&quot;)` =&gt; `true`</div><div><br></div><div>It&#39;s pretty hard to argue against this. Even if you think these other languages are wrong, Swift must regard the empty String as a prefix to be consistent with itself.</div><div><br></div><div>`str.hasPrefix(String(str.characters.prefix(0)))` =&gt; `false` ?!</div><div><br></div><div>I would expect every prefix of `str` to return true as an argument to `str.hasPrefix`…</div><div><br><div><div><blockquote type="cite"><div>On Jul 20, 2016, at 6:49 PM, Ted F.A. van Gaalen via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word"><div>Don’t Panic !</div><div><br></div><div>At the risk of seeing things in a somewhat trivial perspective,</div><div>combined with an almost complete absence of abstraction:</div><div><br></div><div>Note that to relatively simple persons like me: </div><div><br></div><div>String instances are just rows of characters (when not empty, of course) </div><div><br></div><div>There are only two kinds of Strings:</div><div><br></div><div>1. empty Strings, which do not contain amy characters at all</div><div><br></div><div>  and </div><div><br></div><div>2.  Strings containing 1 or more characters.</div><div><br></div><div>Ergo ad Infinitum :</div><div><br></div><div>Empty Strings do not occur in Strings that contain characters. </div><div><br></div><div><br></div><div>I’d say, please try to find possible empty strings</div><div>that might perhaps be embedded e.g. in the string below: </div><div> </div><div>“Don’t Panic: Please read Hitchhiker’s Guide to the Galaxy 42” </div><div><br></div><div><br></div><div>With all due respect: </div><div>This might void the discussion below :o)</div><div><br></div><div>I have nothing against Mathematics as long</div><div>as it is applicable.</div><div><br></div><div><br></div><div>Kind Regards</div><div>Ted</div><div><br></div><div><br></div><br><blockquote type="cite"><span style="font-size:14.25px">To the question of whether any given string has the empty string as prefix:</span><br style="font-size:14.25px"><span style="font-size:14.25px">yes it does. This is a correct answer, and returning true is a correct</span><br style="font-size:14.25px"><span style="font-size:14.25px">behaviour.</span><br style="font-size:14.25px"><br style="font-size:14.25px"><span style="font-size:14.25px">To the question of how many times the empty string occurs in a string: yes,</span><br style="font-size:14.25px"><span style="font-size:14.25px">this can be infinite. &quot;a&quot; == &quot;a&quot; + &quot;&quot; == &quot;a&quot; + &quot;&quot; + &quot;&quot; == &quot;a&quot; + &quot;&quot; + &quot;&quot; +</span><br style="font-size:14.25px"><span style="font-size:14.25px">&quot;&quot; == &quot;a&quot; + &quot;&quot; + &quot;&quot; + &quot;&quot; + &quot;&quot; == ... etc.. Concatenating an empty string,</span><br style="font-size:14.25px"><span style="font-size:14.25px">like adding zero or multiplying by zero for a numerical value, can be done</span><br style="font-size:14.25px"><span style="font-size:14.25px">infinitely many times without making a difference.</span><br style="font-size:14.25px"><br style="font-size:14.25px"><span style="font-size:14.25px">However, there&#39;s correctness and convenience. For example, every integer</span><br style="font-size:14.25px"><span style="font-size:14.25px">can be expressed as a multiple of prime factors. 1 is technically a prime</span><br style="font-size:14.25px"><span style="font-size:14.25px">number - it&#39;s divisible by 1 and itself - but for convenience we say it</span><br style="font-size:14.25px"><span style="font-size:14.25px">isn&#39;t a prime number, because if it isn&#39;t, every integer can be expressed</span><br style="font-size:14.25px"><span style="font-size:14.25px">uniquely as a multiple of prime factors, whereas if it is, there are an</span><br style="font-size:14.25px"><span style="font-size:14.25px">infinite number of such expressions for each integer.</span><br style="font-size:14.25px"><br style="font-size:14.25px"><span style="font-size:14.25px">There may be many algorithms which rely on an empty prefix returning false.</span><br style="font-size:14.25px"><span style="font-size:14.25px">If hasPrefix and hasSuffix are corrected, those algorithms should be</span><br style="font-size:14.25px"><span style="font-size:14.25px">altered to recognise that correction. For example, if breaking up a string</span><br style="font-size:14.25px"><span style="font-size:14.25px">using the empty string as a separator, it seems sensible that the sequence</span><br style="font-size:14.25px"><span style="font-size:14.25px">of substrings would never contain consecutive empty strings.</span><br style="font-size:14.25px"><br style="font-size:14.25px"><span style="font-size:14.25px">On Wed, Jul 20, 2016 at 11:58 PM, Xiaodi Wu via swift-evolution &lt;</span><br style="font-size:14.25px"><a href="mailto:swift-evolution@swift.org" style="font-size:14.25px" target="_blank">swift-evolution@swift.org</a><span style="font-size:14.25px">&gt; wrote:</span><br style="font-size:14.25px"><br style="font-size:14.25px"><blockquote type="cite" style="font-size:14.25px">I&#39;d run this by someone who actually knows math, but afaik there are<br>finitely many empty strings in any given string.<br><br>How many e&#39;s are in any given string? (Ignoring Unicode issues for now,)<br>for each index in the string&#39;s indices, form a substring one character in<br>length starting at that index and compare the value of that substring to e.<br><br>How many empty strings are in any given string? For each index in the<br>string&#39;s indices, form a substring zero characters in length starting at<br>that index and compare the value of that substring to an empty string.<br><br><br><br>On Wed, Jul 20, 2016 at 17:35 Guillaume Lessard &lt;<br><a href="mailto:glessard@tffenterprises.com" target="_blank">glessard@tffenterprises.com</a>&gt; wrote:<br><br><blockquote type="cite"><br><blockquote type="cite">On 20 juil. 2016, at 14:21, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br><br>Doesn&#39;t your second argument undermine your first? If it&#39;s a trivial<br></blockquote>solution and one rarely ever considers empty strings when invoking<br>`hasPrefix`, then returning the technically correct result must be a<br>trivial departure in behavior.<br><br>I specifically used an example where the trivial solution (y=0 instead of<br>y=exp(x)) is a pitfall.<br><br>How many empty strings are contained in any given string?<br>If the answer is infinitely many, it sounds like a pitfall to me.<br><br>Cheers,<br>Guillaume Lessard<br><br><br></blockquote>_______________________________________________</blockquote></blockquote></div>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></blockquote></div><br></div></div></div>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></blockquote></div><br></div></div></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>