adopt compatibility predicates from clpb and clpz into lists and pairs libraries
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
:- use_module(library(atts)).
|
:- use_module(library(atts)).
|
||||||
:- use_module(library(lists)).
|
:- use_module(library(lists)).
|
||||||
:- use_module(library(non_iso)).
|
:- use_module(library(non_iso)).
|
||||||
|
:- use_module(library(pairs)).
|
||||||
:- use_module(library(dcgs)).
|
:- use_module(library(dcgs)).
|
||||||
:- use_module(library(error), []).
|
:- use_module(library(error), []).
|
||||||
|
|
||||||
@@ -106,65 +107,10 @@ type_error(Expectation, Term) :-
|
|||||||
type_error(Expectation, Term, Goal-Arg) :-
|
type_error(Expectation, Term, Goal-Arg) :-
|
||||||
throw(error(type_error(Expectation, Term), type_error(Goal, Arg, Expectation, Term))).
|
throw(error(type_error(Expectation, Term), type_error(Goal, Arg, Expectation, Term))).
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
foldl/4
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
foldl(Goal_3, Ls, A0, A) :-
|
|
||||||
foldl_(Ls, Goal_3, A0, A).
|
|
||||||
|
|
||||||
foldl_([], _, A, A).
|
|
||||||
foldl_([L|Ls], G_3, A0, A) :-
|
|
||||||
call(G_3, L, A0, A1),
|
|
||||||
foldl_(Ls, G_3, A1, A).
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
foldl/5
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
foldl(Goal_4, Xs, Ys, A0, A) :-
|
|
||||||
foldl_(Xs, Ys, Goal_4, A0, A).
|
|
||||||
|
|
||||||
foldl_([], [], _, A, A).
|
|
||||||
foldl_([X|Xs], [Y|Ys], G_4, A0, A) :-
|
|
||||||
call(G_4, X, Y, A0, A1),
|
|
||||||
foldl_(Xs, Ys, G_4, A1, A).
|
|
||||||
|
|
||||||
|
|
||||||
partition(Pred, Ls0, As, Bs) :-
|
partition(Pred, Ls0, As, Bs) :-
|
||||||
include(Pred, Ls0, As),
|
include(Pred, Ls0, As),
|
||||||
exclude(Pred, Ls0, Bs).
|
exclude(Pred, Ls0, Bs).
|
||||||
|
|
||||||
sum_list(Ls, S) :-
|
|
||||||
foldl(sum_, Ls, 0, S).
|
|
||||||
|
|
||||||
sum_(L, S0, S) :- S is S0 + L.
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
Pairs.
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
pairs_keys_values([], [], []).
|
|
||||||
pairs_keys_values([A-B|ABs], [A|As], [B|Bs]) :-
|
|
||||||
pairs_keys_values(ABs, As, Bs).
|
|
||||||
|
|
||||||
pairs_keys(Ps, Ks) :- pairs_keys_values(Ps, Ks, _).
|
|
||||||
|
|
||||||
pairs_values(Ps, Vs) :- pairs_keys_values(Ps, _, Vs).
|
|
||||||
|
|
||||||
map_list_to_pairs(Pred, Ls, Ps) :-
|
|
||||||
map_list_to_pairs2(Ls, Pred, Ps).
|
|
||||||
|
|
||||||
map_list_to_pairs2([], _, []).
|
|
||||||
map_list_to_pairs2([H|T0], Pred, [K-H|T]) :-
|
|
||||||
call(Pred, H, K),
|
|
||||||
map_list_to_pairs2(T0, Pred, T).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
goal_expansion(get_attr(Var, Module, Value), (var(Var),get_atts(Var, Access))) :-
|
goal_expansion(get_attr(Var, Module, Value), (var(Var),get_atts(Var, Access))) :-
|
||||||
Access =.. [Module,Value].
|
Access =.. [Module,Value].
|
||||||
|
|
||||||
@@ -1157,7 +1103,7 @@ labeling_var(V) :- V == 1, !.
|
|||||||
labeling_var(V) :- domain_error(clpb_variable, V).
|
labeling_var(V) :- domain_error(clpb_variable, V).
|
||||||
|
|
||||||
variables_in_index_order(Vs0, Vs) :-
|
variables_in_index_order(Vs0, Vs) :-
|
||||||
maplist(var_with_index, Vs0, IVs0),
|
maplist(var_with_index, Vs0, IVs0),
|
||||||
keysort(IVs0, IVs),
|
keysort(IVs0, IVs),
|
||||||
pairs_values(IVs, Vs).
|
pairs_values(IVs, Vs).
|
||||||
|
|
||||||
@@ -1184,7 +1130,7 @@ indomain(1).
|
|||||||
% Examples:
|
% Examples:
|
||||||
%
|
%
|
||||||
% ==
|
% ==
|
||||||
% ?- sat(A =< B), Vs = [A,B], sat_count(+[1|Vs], Count).
|
% ?- sat(A =< B), Vs = [A,B], sat_count(+[1|Vs], Count).
|
||||||
% Vs = [A, B],
|
% Vs = [A, B],
|
||||||
% Count = 3,
|
% Count = 3,
|
||||||
% sat(A=:=A*B).
|
% sat(A=:=A*B).
|
||||||
@@ -1506,7 +1452,7 @@ max_variable_node(Node, V0-N0, V-N) :-
|
|||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
ands_fusion(Ands0, Ands) :-
|
ands_fusion(Ands0, Ands) :-
|
||||||
maplist(with_variables, Ands0, Pairs0),
|
maplist(with_variables, Ands0, Pairs0),
|
||||||
keysort(Pairs0, Pairs),
|
keysort(Pairs0, Pairs),
|
||||||
group_pairs_by_key(Pairs, Groups),
|
group_pairs_by_key(Pairs, Groups),
|
||||||
pairs_values(Groups, Andss),
|
pairs_values(Groups, Andss),
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
:- module(lists, [member/2, select/3, append/3, foldl/4, foldl/5,
|
:- module(lists, [member/2, select/3, append/2, append/3, foldl/4, foldl/5,
|
||||||
memberchk/2, reverse/2, length/2, maplist/2,
|
memberchk/2, reverse/2, length/2, maplist/2,
|
||||||
maplist/3, maplist/4, maplist/5, maplist/6,
|
maplist/3, maplist/4, maplist/5, maplist/6,
|
||||||
maplist/7, maplist/8, maplist/9, same_length/2,
|
maplist/7, maplist/8, maplist/9, same_length/2,
|
||||||
sumlist/2]).
|
sum_list/2, transpose/2]).
|
||||||
|
|
||||||
|
|
||||||
:- use_module(library(error)).
|
:- use_module(library(error)).
|
||||||
@@ -44,6 +44,12 @@ select(X, [X|Xs], Xs).
|
|||||||
select(X, [Y|Xs], [Y|Ys]) :- select(X, Xs, Ys).
|
select(X, [Y|Xs], [Y|Ys]) :- select(X, Xs, Ys).
|
||||||
|
|
||||||
|
|
||||||
|
append([], []).
|
||||||
|
append([L0|Ls0], Ls) :-
|
||||||
|
append(L0, Rest, Ls),
|
||||||
|
append(Ls0, Rest).
|
||||||
|
|
||||||
|
|
||||||
append([], R, R).
|
append([], R, R).
|
||||||
append([X|L], R, [X|S]) :- append(L, R, S).
|
append([X|L], R, [X|S]) :- append(L, R, S).
|
||||||
|
|
||||||
@@ -102,14 +108,10 @@ maplist(Cont, [E1|E1s], [E2|E2s], [E3|E3s], [E4|E4s], [E5|E5s], [E6|E6s], [E7|E7
|
|||||||
maplist(Cont, E1s, E2s, E3s, E4s, E5s, E6s, E7s, E8s).
|
maplist(Cont, E1s, E2s, E3s, E4s, E5s, E6s, E7s, E8s).
|
||||||
|
|
||||||
|
|
||||||
sumlist_([], S, S).
|
sum_list(Ls, S) :-
|
||||||
sumlist_([N|Ns], S, S0) :-
|
foldl(sum_, Ls, 0, S).
|
||||||
S1 is S0 + N,
|
|
||||||
sumlist_(Ns, S, S1).
|
|
||||||
|
|
||||||
sumlist(Ns, S) :-
|
sum_(L, S0, S) :- S is S0 + L.
|
||||||
must_be(list, Ns),
|
|
||||||
sumlist_(Ns, S, 0).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -134,3 +136,16 @@ foldl_([], [], _, A, A).
|
|||||||
foldl_([X|Xs], [Y|Ys], G_4, A0, A) :-
|
foldl_([X|Xs], [Y|Ys], G_4, A0, A) :-
|
||||||
call(G_4, X, Y, A0, A1),
|
call(G_4, X, Y, A0, A1),
|
||||||
foldl_(Xs, Ys, G_4, A1, A).
|
foldl_(Xs, Ys, G_4, A1, A).
|
||||||
|
|
||||||
|
transpose(Ls, Ts) :-
|
||||||
|
lists_transpose(Ls, Ts).
|
||||||
|
|
||||||
|
lists_transpose([], []).
|
||||||
|
lists_transpose([L|Ls], Ts) :-
|
||||||
|
maplist(same_length(L), Ls),
|
||||||
|
foldl(transpose_, L, Ts, [L|Ls], _).
|
||||||
|
|
||||||
|
transpose_(_, Fs, Lists0, Lists) :-
|
||||||
|
maplist(list_first_rest, Lists0, Fs, Lists).
|
||||||
|
|
||||||
|
list_first_rest([L|Ls], L, Ls).
|
||||||
|
|||||||
21
src/prolog/lib/pairs.pl
Normal file
21
src/prolog/lib/pairs.pl
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
:- module(pairs, [pairs_keys_values/3,
|
||||||
|
pairs_keys/2,
|
||||||
|
pairs_values/2,
|
||||||
|
map_list_to_pairs/3]).
|
||||||
|
|
||||||
|
|
||||||
|
pairs_keys_values([], [], []).
|
||||||
|
pairs_keys_values([A-B|ABs], [A|As], [B|Bs]) :-
|
||||||
|
pairs_keys_values(ABs, As, Bs).
|
||||||
|
|
||||||
|
pairs_keys(Ps, Ks) :- pairs_keys_values(Ps, Ks, _).
|
||||||
|
|
||||||
|
pairs_values(Ps, Vs) :- pairs_keys_values(Ps, _, Vs).
|
||||||
|
|
||||||
|
map_list_to_pairs(Pred, Ls, Ps) :-
|
||||||
|
map_list_to_pairs2(Ls, Pred, Ps).
|
||||||
|
|
||||||
|
map_list_to_pairs2([], _, []).
|
||||||
|
map_list_to_pairs2([H|T0], Pred, [K-H|T]) :-
|
||||||
|
call(Pred, H, K),
|
||||||
|
map_list_to_pairs2(T0, Pred, T).
|
||||||
Reference in New Issue
Block a user