1 :- module(pltables_export_tools, [
2 merge_attributes/3
3 ]).
4
5 :- use_module(probsrc(self_check)).
6 :- use_module(probsrc(module_information)).
7
8 :- module_info(group,pltables).
9 :- module_info(description,'Tools used by several of the export modules').
10
11 % ----
12 % internal: merging of attribute lists
13 % first list: low priority, merge in
14 % second list: high priority, keep
15 % third list: Result
16 % ----
17 :-assert_must_succeed(pltables_export_tools:merge_attributes([],[],[])).
18 :-assert_must_succeed(pltables_export_tools:merge_attributes([],[attr(x)],[attr(x)])).
19 :-assert_must_succeed(pltables_export_tools:merge_attributes([attr(x)],[attr2(y)],[attr(x),attr2(y)])).
20 :-assert_must_succeed(pltables_export_tools:merge_attributes([attr(y)],[attr(x)],[attr(x)])).
21 merge_attributes([], Res, Res).
22 merge_attributes([Attr | Attrs], HiPri, Res) :-
23 functor(Attr, AttrName, Arity),
24 functor(EmptyAttr, AttrName, Arity),
25 merge_attributes(Attrs, HiPri, Res1),
26 (member(EmptyAttr, HiPri) -> Res = Res1 ; Res = [Attr | Res1]).