<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Nov 27, 2013 at 3:56 PM, Michael Richter <span dir="ltr"><<a href="mailto:ttmrichter@gmail.com" target="_blank">ttmrichter@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Oops.  Forgot that this list is setting Reply-to to the person, not the list.  Sorry, Peter.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On 27 November 2013 12:55, Michael Richter <span dir="ltr"><<a href="mailto:ttmrichter@gmail.com" target="_blank">ttmrichter@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div><div class="h5">
<div><div><div class="gmail_quote">On 26 November 2013 13:15, Peter Wang <span dir="ltr"><<a href="mailto:novalazy@gmail.com" target="_blank">novalazy@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div>On Sun, 24 Nov 2013 15:42:14 +1100, Paul Bone <<a href="mailto:paul@bone.id.au" target="_blank">paul@bone.id.au</a>> wrote:<br>
> +<br>
> +:- pred pqueue.merge2(pqueue(K, V)::in, pqueue(K, V)::in, pqueue(K, V)::out)<br>
> +    is det.<br>
> +<br>
> +pqueue.merge2(empty,                   B,     B).<br>
> +pqueue.merge2(A@pqueue(_, _, _, _, _), empty, A).<br>
> +pqueue.merge2(pqueue(_, K, V, L, R),   !.PQ@pqueue(_, _, _, _, _), !:PQ) :-<br>
> +    pqueue.merge2(L, !PQ),<br>
> +    pqueue.merge2(R, !PQ),<br>
> +    pqueue.insert(K, V, !PQ).<br>
<br>
</div>pqueue.merge2(A, B, C) :-<br>
    (<br>
        A = empty,<br>
        C = B<br>
    ;<br>
        A = pqueue(_, _, _, _, _),<br>
        B = empty,<br>
        C = A<br>
    ;<br>
        A = pqueue(_, K, V, L, R),<br>
        B = pqueue(_, _, _, _, _),<br>
        merge2(L, B, C0),<br>
        merge2(R, C0, C1),<br>
        insert(K, V, C1, C)<br>
    ).<br></blockquote></div><div class="gmail_extra"><br></div></div></div></div></div>Personally I find the multiple functors easier to see that the switch has been appropriately covered.  </div></div></blockquote></div>
</div></blockquote><div><br></div><div>It's det code the compiler will tell if if things haven't been appropriately covered.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">
<div class="gmail_extra">The coverage data is basically tabular in nature.  The linear format of your choice here is IMO a poor fit<font color="#888888">.</font></div></div></blockquote></div></div></blockquote><div><br></div>
<div>I prefer Peter's version -- it avoids several horrible looking head unifications.  If nothing</div><div>else, they have a tendency to look nasty inside the debugger.  (Consider what someone</div><div>browsing the a call to merge2 in inside mdb would have to deal with "B" or whatever</div>
<div>the compiler expands "<span style="color:rgb(80,0,80)">!.PQ@pqueue(_, _, _, _, _)" into.)</span></div><div><br></div><div>Cheers,</div><div>Julien.</div><div><br></div><div><br></div><div> </div></div><br></div>
</div>