<div dir="ltr">Hi Dmitri,<div><br></div><div>Cool, thanks, it&#39;s in the making! Sorry I was really busy this week.</div><div><br></div><div>Can you tell me why is it required to have different implementation for Forward and Bidirectional LazyCollectionTypes?</div><div><br></div><div>Otherwise it&#39;s all clear!</div><div><br></div><div>Thanks a lot!</div><div><br></div><div>Cheers,</div><div><br></div><div>Mark</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, 22 Feb 2016 at 02:55 Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com">gribozavr@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sun, Feb 14, 2016 at 4:12 AM, Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>&gt; wrote:<br>
&gt; On Sun, Feb 14, 2016 at 2:51 AM, Mark Aron Szulyovszky via<br>
&gt; swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt; Problem:<br>
&gt;&gt; .prefix() works eagerly even on LazyCollectionType. This means access is not<br>
&gt;&gt; O(1).<br>
&gt;&gt;<br>
&gt;&gt; Implications:<br>
&gt;&gt; There&#39;s no way to only get the first N elements of a lazy sequence without a<br>
&gt;&gt; nasty for loop. If prefix() used on a lazy sequence, it&#39;ll trigger<br>
&gt;&gt; computation on the whole array, just to return the first N elements.<br>
&gt;&gt;<br>
&gt;&gt; Proposal:<br>
&gt;&gt; It would be more more useful if lazy.&lt;insert methods here&gt;.prefix() returned<br>
&gt;&gt; LazyPrefixCollection&lt;Generator.Element&gt;<br>
&gt;&gt; instead of<br>
&gt;&gt; Slice&lt;LazyCustomCollection&lt;Range&lt;Generator.Element&gt;&gt;&gt;.<br>
&gt;<br>
&gt; Thanks, Mark!<br>
&gt;<br>
&gt; I think this would be a good addition for forward and bidirectional<br>
&gt; collections.  You&#39;d need two separate implementations for forward and<br>
&gt; bidirectional wrappers.<br>
&gt;<br>
&gt; For random-access collections, the eager implementation is optimal<br>
&gt; (finding the end index runs in O(1) and Slice&lt;&gt; does not introduce any<br>
&gt; constant factor compared to non-trivial wrappers), and we should keep<br>
&gt; that behavior by adding an overload that would return a<br>
&gt; LazyCollection&lt;Slice&lt;Base&gt;&gt;.<br>
<br>
Hi Mark,<br>
<br>
I think you can continue with writing a formal proposal in the<br>
swift-evolution repository, presenting the full API that you are<br>
proposing.<br>
<br>
Dmitri<br>
<br>
--<br>
main(i,j){for(i=2;;i++){for(j=2;j&lt;i;j++){if(!(i%j)){j=0;break;}}if<br>
(j){printf(&quot;%d\n&quot;,i);}}} /*Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>&gt;*/<br>
</blockquote></div>