:- use_module(library(dif)).
+:- meta_predicate if_(0, 0, 0).
+
if_(If_1, Then_0, Else_0) :-
call(If_1, T),
( T == true -> call(Then_0)
non(true, false).
non(false, true).
+:- meta_predicate tfilter(1, ?, ?).
+
tfilter(C_2, Es, Fs) :-
i_tfilter(Es, C_2, Fs).
if_(call(C_2, E), Fs0 = [E|Fs], Fs0 = Fs),
i_tfilter(Es, C_2, Fs).
+:- meta_predicate tpartition(1, ?, ?).
+
tpartition(P_2, Xs, Ts, Fs) :-
i_tpartition(Xs, P_2, Ts, Fs).
, ( Fs0 = [X|Fs], Ts0 = Ts ) ),
i_tpartition(Xs, P_2, Ts, Fs).
+:- meta_predicate ','(0, 0, ?).
+
','(A_1, B_1, T) :-
if_(A_1, call(B_1, T), T = false).
+:- meta_predicate ';'(0, 0, ?).
+
';'(A_1, B_1, T) :-
if_(A_1, T = true, call(B_1, T)).
+:- meta_predicate cond_t(0, 0, ?).
+
cond_t(If_1, Then_0, T) :-
if_(If_1, ( Then_0, T = true ), T = false ).
i_memberd_t([X|Xs], E, T) :-
if_( X = E, T = true, i_memberd_t(Xs, E, T) ).
+:- meta_predicate tmember(1, ?).
+
tmember(P_2, [X|Xs]) :-
if_( call(P_2, X), true, tmember(P_2, Xs) ).
+:- meta_predicate tmember_t(1, ?).
+
tmember_t(P_2, [X|Xs], T) :-
if_( call(P_2, X), T = true, tmember_t(P_2, Xs, T) ).