%% remove_template_duplicates( +List, -NonDups ).
%
% True iff NonDups is List with all subsequent term_template/2 unifiables 
% removed.
%==
% ?- remove_template_duplicates( [a(1),b(2),a(3),b(4)], NonDups ).
% NonDups = [a(1), b(2)].
%==
% @author nicos angelopoulos
% @version  0.1 2014/9/1
%
remove_template_duplicates( [], [] ).
remove_template_duplicates( [H|T], [H|R] ) :-
    functor( H, Name, Arity ),
    functor( Template, Name, Arity ),
	remove_template_duplicates_of_element( T, Template, Rem ),
	remove_template_duplicates( Rem, R ).

remove_template_duplicates_of_element( [], _Template, [] ).
remove_template_duplicates_of_element( [H|T], Template, Rem ) :-
	\+ \+ H = Template,
	!,
	remove_template_duplicates_of_element( T, Template, Rem ).
remove_template_duplicates_of_element( [H|T], Template, [H|Rem] ) :-
	remove_template_duplicates_of_element( T, Template, Rem ).