<div dir="ltr">I think I&#39;d like to +1 a &#39;for x in loop(from: while: next:)&#39;. (Possibly &#39;iterate&#39; rather than &#39;loop&#39;?)<div><br></div><div>I&#39;ve not missed the C-style for-loop so I&#39;ve not argued to keep it, but recently I was refactoring a function which started with a UIView and iterated up the hierarchy through the superview property, and it occurred to me recently that neither stride nor sequences/generators handle recursive iterations well.</div><div><br></div><div>So, I imagine that would look like this:</div><div>for view in loop(from: startingSubview, while: { $0 != nil }, next: { $0 = $0.superview })</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Apr 11, 2016 at 11:31 PM, Dave Abrahams 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"><span class=""><br>
on Mon Apr 11 2016, Michel Fortin &lt;<a href="http://michel.fortin-AT-michelf.ca" rel="noreferrer" target="_blank">michel.fortin-AT-michelf.ca</a>&gt; wrote:<br>
<br>
&gt; Le 11 avr. 2016 à 14:36, Dave Abrahams &lt;<a href="mailto:dabrahams@apple.com">dabrahams@apple.com</a>&gt; a écrit :<br>
&gt;<br>
&gt;&gt; 3. The fact that we&#39;re migrating C-style for loops to<br>
&gt;&gt;   uses of stride, as noted in <a href="https://github.com/apple/swift/pull/2125" rel="noreferrer" target="_blank">https://github.com/apple/swift/pull/2125</a>,<br>
&gt;&gt;   has convinced me that, sadly, we may need an answer that doesn&#39;t<br>
&gt;&gt;   involve ranges.  But maybe something like<br>
&gt;&gt;<br>
&gt;&gt;     for x in loop(from: 0.1, while: { $0 &lt; 10 }, next: { $0 + .2 })<br>
&gt;&gt;<br>
&gt;&gt;   is sufficient for this purpose.<br>
&gt;<br>
&gt; Please add that.<br>
<br>
</span>Please write a proposal and ideally, submit a patch :-).<br>
<br>
Seriously, if this is something you believe in, we could really use the<br>
help.<br>
<span class=""><br>
&gt; First, it would relieve `stride` from some of the pressure of<br>
&gt; excelling at replacing existing C-style for loops. But it would also<br>
&gt; become pretty easy to write custom sequences like this one:<br>
&gt;<br>
&gt; func uniform(start: Double, end: Double, numberOfSteps totalSteps: Int) -&gt; Sequence {<br>
&gt;       var currentStep = 0<br>
&gt;       return loop(from: start, while: { _ in<br>
&gt;               currentStep &lt; totalSteps<br>
&gt;       }, next: { _ in<br>
&gt;               currentStep += 1<br>
&gt;               return start * (Double(totalSteps-currentStep) / Double(totalSteps)) +<br>
&gt;                       end * (Double(currentStep) / Double(totalSteps))<br>
&gt;       })<br>
&gt; }<br>
<br>
</span>Aside from the fact that you can&#39;t return Sequence, this seems like a<br>
much better way to do that in Swift 3.0:<br>
<br>
func uniform(<br>
<span class="">  start: Double, end: Double, numberOfSteps totalSteps: Int<br>
</span>) -&gt; LazyMapRandomAccessCollection&lt;CountableRange&lt;Int&gt;, Double&gt; {<br>
  return (0..&lt;totalSteps).lazy.map {<br>
     start * (Double(totalSteps-$0) / Double(totalSteps)) +<br>
     end * (Double($0) / Double(totalSteps))<br>
  }<br>
}<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Dave<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<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>
</div></div></blockquote></div><br></div>