From: Mark Thom Date: Wed, 3 Feb 2021 19:46:33 +0000 (-0700) Subject: add meta-predicate declarations to reif library X-Git-Tag: v0.9.0~150^2~66^2~8 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=48f3f4ca37966c2f748d12c95e71e464a0776697;p=scryer-prolog.git add meta-predicate declarations to reif library --- diff --git a/src/lib/reif.pl b/src/lib/reif.pl index 0e958356..092f93ec 100644 --- a/src/lib/reif.pl +++ b/src/lib/reif.pl @@ -4,6 +4,8 @@ :- 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) @@ -26,6 +28,8 @@ dif(X, Y, T) :- non(true, false). non(false, true). +:- meta_predicate tfilter(1, ?, ?). + tfilter(C_2, Es, Fs) :- i_tfilter(Es, C_2, Fs). @@ -34,6 +38,8 @@ i_tfilter([E|Es], C_2, Fs0) :- 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). @@ -44,12 +50,18 @@ i_tpartition([X|Xs], P_2, Ts0, Fs0) :- , ( 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 ). @@ -60,8 +72,12 @@ i_memberd_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) ).