<div dir="ltr"><div><div>It's worth remembering that this is undefined behavior.  It is usually safe to start defining behavior in undefined cases as they should be, by definition, backwards compatible.<br><br></div>To be honest, this is not an aspect of Iterate that I was aware of.  It is a bit surprising that this is undefined behavior.  Gabor's examples are a bit theoretical, but if my understanding is correct, the following functions have undefined behavior.<br>

<br><span style="font-family:courier new,monospace">(defun split-on1 (obj list &key (test 'eql))<br>  (iter (for (x . list-b) :on list)<br>    (collect x :into list-a)<br>    (until (funcall test obj x))<br>    (finally (return (list list-a list-b)))))<br>

</span><br></div>...or, if you prefer that the element goes on the second list,...<br><span style="font-family:courier new,monospace"><br>(defun split-on2 (obj list &key (test 'eql))<br>  (iter (for (x . list-b) :on list)<br>

    (until (funcall test obj x))<br>    (collect x :into list-a)<br>    (finally (return (list list-a (cons x list-b))))))</span><br><div><br></div><div>I suppose that the specification states that both of these are undefined (due to the usage of x in on-split1 and x and rest in on-split2), though some testing seems to suggest that they work.  Seems like defining the bindings would be a step in the right direction.  Am I missing something?<br>

</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 21, 2014 at 11:17 AM,  <span dir="ltr"><<a href="mailto:Joerg-Cyril.Hoehle@t-systems.com" target="_blank">Joerg-Cyril.Hoehle@t-systems.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">Gábor Balázs wrote:<br>
<br>
>So is there some design reason against making the drivers accessible in the finally clause?<br>
</div>I think it's simply more robust to locally roll your own iterate extension that exhibits the behavior you need using the defined extension API, rather than produce an incompatible Iterate with an obscure change in semantics. Mind dll hell!<br>


<br>
Do you want to debug a large app that exhibits an obscure bug that would eventually be traced down to the user using a version of the Iterate library that differs from yours in that aspect?<br>
<div class=""><br>
>Definitely should be on the "Differences between LOOP and iterate" page.<br>
</div>Good point.  Who submits a patch to the LaTeX documentation?<br>
<div class="HOEnZb"><div class="h5"><br>
Regards,<br>
        Jörg Höhle<br>
_______________________________________________<br>
Iterate-devel mailing list<br>
<a href="mailto:Iterate-devel@common-lisp.net">Iterate-devel@common-lisp.net</a><br>
<a href="http://common-lisp.net/cgi-bin/mailman/listinfo/iterate-devel" target="_blank">http://common-lisp.net/cgi-bin/mailman/listinfo/iterate-devel</a><br>
</div></div></blockquote></div><br></div>