<div dir="ltr">Hi,<div><br></div><div>I think I have found a couple of bugs in lazy collections; just checking before filling. The following code is a filter map version of the Sieve of Eratosthenes:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span style="color:rgb(187,44,162)">func</span> lazyFilterMapForEachLoop(limit: <span style="color:rgb(112,61,170)">Int</span> = <span style="color:rgb(79,129,135)">9</span>) -&gt; [<span style="color:rgb(112,61,170)">Int</span>] {</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">    <span style="color:rgb(187,44,162)">var</span> possibles = <span style="color:rgb(112,61,170)">Array</span>(count: limit + <span style="color:rgb(39,42,216)">1</span>, repeatedValue: <span style="color:rgb(187,44,162)">true</span>)</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,132,0)"><span style="color:rgb(0,0,0)">    </span><span style="color:rgb(187,44,162)">return</span><span style="color:rgb(0,0,0)"> (</span><span style="color:rgb(39,42,216)">2</span><span style="color:rgb(0,0,0)"> ... limit).</span><span style="color:rgb(112,61,170)">lazy</span><span style="color:rgb(0,0,0)">.</span><span style="color:rgb(61,29,129)">filter</span><span style="color:rgb(0,0,0)"> { i </span><span style="color:rgb(187,44,162)">in</span><span style="color:rgb(0,0,0)"> </span>// Has to be lazy and sequential so that `possibles` is updated before it is used</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">        <span style="color:rgb(61,29,129)">print</span>(<span style="color:rgb(209,47,27)">&quot;i BF: </span>\<span style="color:rgb(209,47,27)">(</span>i<span style="color:rgb(209,47,27)">)&quot;</span>)</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">        <span style="color:rgb(187,44,162)">return</span> possibles[i]</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">    }.<span style="color:rgb(61,29,129)">map</span> { i <span style="color:rgb(187,44,162)">in</span></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">        <span style="color:rgb(61,29,129)">print</span>(<span style="color:rgb(209,47,27)">&quot;i AF: </span>\<span style="color:rgb(209,47,27)">(</span>i<span style="color:rgb(209,47,27)">)&quot;</span>)</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">        (i * i).<span style="color:rgb(61,29,129)">stride</span>(through: limit, by: i).<span style="color:rgb(61,29,129)">forEach</span> { j <span style="color:rgb(187,44,162)">in</span></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">            possibles[j] = <span style="color:rgb(187,44,162)">false</span></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">        }</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">        <span style="color:rgb(187,44,162)">return</span> i</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">    }</p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">}</p></div></blockquote><div>











<div><br></div>It produces for a limit of 9:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 2</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 3</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 4</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 5</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 6</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 7</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 8</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 9</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 2</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i AF: 2</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 3</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i AF: 3</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 4</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 5</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i AF: 5</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 6</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 7</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i AF: 7</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 8</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>i BF: 9</b></p></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><b>fatal error: Index out of range</b></p></div></blockquote><div><b><br></b></div><div>There are a couple of odd things about this:</div><div><ol><li>The filter closure is called twice per trial integer! First without preceding to the map stage at all, i.e. all values are filtered out! Second time through the numbers it does proceed to the map stage as you would expect.</li><li>It produces an &quot;Index out of range&quot; error despite the fact that maximum number processed is 9 which is an allowable index of `possibles`.</li></ol></div><div>Is this a couple of bugs or have I misunderstood something?</div><div><br></div><div>Thanks in advance,</div><div><br><div class="gmail_signature">  -- Howard.<br></div>
</div></div>