:- use_module(library(i18n/i18n_op)). p(L, L2, L3) :- findall(E, distinct(E, ( member(E, L), E = ~a, \+((member(E, L2), member(E, L3) )), (once(sub_string(E, _, _, _, a)) ;once(sub_string(E, _, _, _, b)) ) )), RL), writeln(user_output, RL).