Это работает так, как вы хотите?
satisfy_property([], _).
satisfy_property([X|L], P) :-
var(X),
!,
write("false "),
satisfy_property(L,P).
satisfy_property([X|L], P) :-
R=..[P,X],
R,
write("true "),
satisfy_property(L,P).
satisfy_property([X|L], P) :-
R=..[P,X],
not(R),
write("false "),
satisfy_property(L,P).
beautiful(mary).
beautiful(anne).
beautiful(louise).
?-satisfy_property([mary, tom, TOM, anne, louise], beautiful).
Это дает мне:
true false false true true Yes.