<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jul 22, 2013 at 12:43 PM, Paul Bone <span dir="ltr"><<a href="mailto:paul@bone.id.au" target="_blank">paul@bone.id.au</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Jul 22, 2013 at 12:04:59PM +1000, Julien Fischer wrote:<br>
><br>
> Hi Paul,<br>
><br>
> On Mon, 22 Jul 2013, Paul Bone wrote:<br>
><br>
>>> @@ -2612,6 +2636,40 @@ array.map_corresponding_foldl_2(P, I, N, A, B, !C, !D) :-<br>
>>>      ).<br>
>>><br>
>>> +<br>
>>> +array.all_false(Pred, Array) :-<br>
>>> +    do_all_false(Pred, array.min(Array), array.max(Array), Array).<br>
>>> +<br>
>>> +:- pred do_all_false(pred(T), int, int, array(T)).<br>
>>> +%:- mode do_all_false(in(pred(in) is semidet), in, in, array_ui) is semidet.<br>
>>> +:- mode do_all_false(in(pred(in) is semidet), in, in, in) is semidet.<br>
>>> +<br>
>>> +do_all_false(Pred, I, UB, Array) :-<br>
>>> +    ( if I =< UB then<br>
>>> +        Elem = Array ^ unsafe_elem(I),<br>
>>> +        not Pred(Elem),<br>
>>> +        do_all_false(Pred, I + 1, UB, Array)<br>
>>> +    else<br>
>>> +        true<br>
>>> +    ).<br>
>>> +<br>
>><br>
>> maybe I'm bikeshedding here.  But would it not be better to implement<br>
>> all_false in terms of all true by adding a closure?<br>
><br>
> Better in what way?  (It is certainly more expensive which is probably<br>
> why we *don't* do that for list.all_false/2.)<br>
<br>
</div></div>It avoids repitition.  </blockquote><div><br></div><div style>The repetition is not significant in this case, and in any case, we should try</div><div style>to avoid obvious inefficiencies in library code.</div>
<div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">But I don't know if the compiler will be able to<br>
specalize the higher order call and then inline it.</blockquote><div><br></div><div style>With the right optimization settings I think it should be able to.</div><div style>(OTOH, I'd prefer not to rely on having the right optimization settings in the</div>
<div style>first place.)</div><div> </div><div style>Cheers,</div><div style>Julien.</div></div><br></div></div>