条件の選別([],[],[],VL) :-
  ! .
条件の選別([[A|_]|R1],[B|R2],[A = B|R],VL) :-
  \+(var(B)),
  条件の選別(R1,R2,R,VL),
  ! .
条件の選別([[A]|R1],[B|R2],[A >= B2|R],VL) :-
  var(B),
  member(B1 @>= B2,VL),
  B==B1,
  条件の選別(R1,R2,R,VL),
  !.
条件の選別([[A]|R1],[B|R2],[A <= B2|R],VL) :-
  var(B),
  member(B1 @=< B2,VL),
  B==B1,
  条件の選別(R1,R2,R,VL),
  !.
条件の選別([_|R1],[_|R2],R,VL) :-
  条件の選別(R1,R2,R,VL).

条件句の生成/4 は and で繋いでいるだけです。