title: Reification integration issues
body: <p>I offered the following clpfd-based code for the recent question <a href="https://stackoverflow.com/a/29459595/4609915">Segregating Lists in Prolog</a>:</p>
  
  <pre><code>list_evens_odds([],[],[]).
  list_evens_odds([X|Xs],[X|Es],Os) :-
     X mod 2 #= 0,
     list_evens_odds(Xs,Es,Os).
  list_evens_odds([X|Xs],Es,[X|Os]) :-
     X mod 2 #= 1,
     list_evens_odds(Xs,Es,Os).
  </code></pre>
  
  <p>It is concise and pure, <em>but</em> can leave behind many unnecessary choice-points. Consider:</p>
  
  <pre><code>?- list_evens_odds([1,2,3,4,5,6,7],Es,Os).
  </code></pre>
  
  <p>Above query leaves behind a <em>useless choice-point for every non-odd item</em> in <code>[1,2,3,4,5,6,7]</code>.</p>
  
  <h3>Alternative implementation</h3>
  
  <p>Using the reification technique demonstrated by @false in <a href="https://stackoverflow.com/a/27358600/4609915">Prolog union for A U B U C</a> can reduce the number of unnecessary choice-points. The implementation could change to:</p>
  
  <pre><code>list_evens_odds([],[],[]).
  list_evens_odds([X|Xs],Es,Os) :-
     if_(#&lt;=&gt;(X mod 2 #= 0), (Es=[X|Es0],Os=   Os0),
                             (Es=   Es0, Os=[X|Os0])),
     list_evens_odds(Xs,Es0,Os0).
  </code></pre>
  
  <p>To <em>directly</em> interact with clpfd-reification the implementation of <code>if_/3</code> could be adapted like this:</p>
  
  <pre><code>if_( C_1, Then_0, Else_0) :-
     call(C_1,Truth01),
     indomain(Truth01),
     ( Truth01 == 1 -&gt; Then_0 ; Truth01 == 0, Else_0 ).
  </code></pre>
  
  <p>Of course, <code>(=)/3</code> would also need to be adapted to this convention.</p>
  
  <h3>The bottom line</h3>
  
  <p>So I wonder: Is using <code>0</code> and <code>1</code> as truth-values instead of <code>false</code> and <code>true</code> a good idea? </p>
  
  <p>Am I missing problems along that road? Help, please! Thank you in advance!</p>