It's very simple with some basic predicates:
members([],_).
members([M|Ms],Xs) :- select(M,Xs,Ys),members(Ms,Ys).
clue1(Suspects) :- members([[angela,_,_,female],[mary,_,_,female],[david,_,_,male]],Suspects).
clue2(Suspects) :- members([[_,leung,5,_],[_,diamond,7,_],[_,grant,8,_]],Suspects).
solve(Suspects) :-
Suspects = [[_,_,_,_],[_,_,_,_],[_,_,_,_]],
clue1(Suspects),
clue2(Suspects).
That gives me:
?- solve(X).
X = [[angela, leung, 5, female], [mary, diamond, 7, female], [david, grant, 8, male]] ;
X = [[angela, leung, 5, female], [mary, grant, 8, female], [david, diamond, 7, male]] ;
X = [[angela, diamond, 7, female], [mary, leung, 5, female], [david, grant, 8, male]] ;
X = [[angela, grant, 8, female], [mary, leung, 5, female], [david, diamond, 7, male]] ;
X = [[angela, diamond, 7, female], [mary, grant, 8, female], [david, leung, 5, male]] ;
X = [[angela, grant, 8, female], [mary, diamond, 7, female], [david, leung, 5, male]] ;
X = [[angela, leung, 5, female], [david, diamond, 7, male], [mary, grant, 8, female]] ;
X = [[angela, leung, 5, female], [david, grant, 8, male], [mary, diamond, 7, female]] ;
X = [[angela, diamond, 7, female], [david, leung, 5, male], [mary, grant, 8, female]] ;
X = [[angela, grant, 8, female], [david, leung, 5, male], [mary, diamond, 7, female]] ;
X = [[angela, diamond, 7, female], [david, grant, 8, male], [mary, leung, 5, female]] ;
X = [[angela, grant, 8, female], [david, diamond, 7, male], [mary, leung, 5, female]] ;
X = [[mary, leung, 5, female], [angela, diamond, 7, female], [david, grant, 8, male]] ;
X = [[mary, leung, 5, female], [angela, grant, 8, female], [david, diamond, 7, male]] ;
X = [[mary, diamond, 7, female], [angela, leung, 5, female], [david, grant, 8, male]] ;
X = [[mary, grant, 8, female], [angela, leung, 5, female], [david, diamond, 7, male]] ;
X = [[mary, diamond, 7, female], [angela, grant, 8, female], [david, leung, 5, male]] ;
X = [[mary, grant, 8, female], [angela, diamond, 7, female], [david, leung, 5, male]] ;
X = [[david, leung, 5, male], [angela, diamond, 7, female], [mary, grant, 8, female]] ;
X = [[david, leung, 5, male], [angela, grant, 8, female], [mary, diamond, 7, female]] ;
X = [[david, diamond, 7, male], [angela, leung, 5, female], [mary, grant, 8, female]] ;
X = [[david, grant, 8, male], [angela, leung, 5, female], [mary, diamond, 7, female]] ;
X = [[david, diamond, 7, male], [angela, grant, 8, female], [mary, leung, 5, female]] ;
X = [[david, grant, 8, male], [angela, diamond, 7, female], [mary, leung, 5, female]] ;
X = [[mary, leung, 5, female], [david, diamond, 7, male], [angela, grant, 8, female]] ;
X = [[mary, leung, 5, female], [david, grant, 8, male], [angela, diamond, 7, female]] ;
X = [[mary, diamond, 7, female], [david, leung, 5, male], [angela, grant, 8, female]] ;
X = [[mary, grant, 8, female], [david, leung, 5, male], [angela, diamond, 7, female]] ;
X = [[mary, diamond, 7, female], [david, grant, 8, male], [angela, leung, 5, female]] ;
X = [[mary, grant, 8, female], [david, diamond, 7, male], [angela, leung, 5, female]] ;
X = [[david, leung, 5, male], [mary, diamond, 7, female], [angela, grant, 8, female]] ;
X = [[david, leung, 5, male], [mary, grant, 8, female], [angela, diamond, 7, female]] ;
X = [[david, diamond, 7, male], [mary, leung, 5, female], [angela, grant, 8, female]] ;
X = [[david, grant, 8, male], [mary, leung, 5, female], [angela, diamond, 7, female]] ;
X = [[david, diamond, 7, male], [mary, grant, 8, female], [angela, leung, 5, female]] ;
X = [[david, grant, 8, male], [mary, diamond, 7, female], [angela, leung, 5, female]].