Вы можете увеличить свою DCG, чтобы сохранить некоторое состояние (пол последнего предложения):
father --> ['Peter'].
mother --> ['Isabel'].
child --> ['Guido'].
child --> ['Claudia'].
verb --> [is].
relation --> [father, of].
relation --> [mother, of].
pronoun(he) --> [he].
pronoun(she) --> [she].
adjective --> [a, male].
adjective --> [a, female].
s(G) --> s(none,G).
s(_,he) --> father, verb, relation, child.
s(_,she) --> mother, verb, relation, child.
s(G,G) --> pronoun(G), verb, adjective.
И теперь вы можете связывать запросы, используя это состояние:
?- phrase(s(G1),['Peter', is, father, of, 'Guido']), phrase(s(G1,G2),[he, is, a, male]).
G1 = G2, G2 = he
Возможно, вы захотите немного изменить DCG, чтобы ограничить отношения (используя параметр Gender). Например, вы, DCG, в настоящее время принимаете 'Peter' is mother of 'Guido'
, что, я не уверен, было задумано.