带变量的Prolog-DCG

带变量的Prolog-DCG,prolog,dcg,Prolog,Dcg,我有两个人的DCG句子,分别代表一男一女。我想用“他”或“她”来指前面一句话中提到的人 假设我们有这些DCG: father --> [Peter]. mother --> [Isabel]. child --> [Guido]. child --> [Claudia]. verb --> [is]. relation --> [father, of]. relation --> [mother, of]. pronoun --> [he].

我有两个人的DCG句子,分别代表一男一女。我想用“他”或“她”来指前面一句话中提到的人

假设我们有这些DCG:

father --> [Peter].
mother --> [Isabel].

child --> [Guido].
child --> [Claudia].

verb --> [is].
relation --> [father, of].
relation --> [mother, of].

pronoun --> [he].
pronoun --> [she].

adjective --> [a, male].
adjective --> [a, female].

s --> father, verb, relation, child.
s --> mother, verb, relation, child.
s --> pronoun, verb, adjective.
查询
?-s([Peter,is,father,of,Guido])。
返回
true

当我现在查询
时,如何确保-s([he,is,a,male],])。
应该返回
true
,因为我在上一句中已经提到了Peter(男性)。否则,它应该返回
false


此问题使用与相同的示例。

您可以增加DCG以保持某种状态(最后一句的性别):

现在,您可以使用以下状态链接查询:

?- phrase(s(G1),['Peter', is, father, of, 'Guido']), phrase(s(G1,G2),[he, is, a, male]).
G1 = G2, G2 = he

您可能需要稍微修改DCG以约束关系(使用性别参数)。例如,您DCG目前接受的是“彼得”是“圭多”的母亲,我不确定其意图。

感兴趣:感兴趣:诺维格您还需要添加另一个答案中的
Peter
是一个变量,
'Peter'
是一个原子。请参阅:这个想法是添加像
male('Peter')
这样的事实,然后从那里开始。一旦成功了,就把事实去掉,用一句话把想法传达给另一句话。可能需要让第一句话断言事实,或者将两句话视为一个语义概念,在两句话之间有一个隐含的运算符。
?- phrase(s(G1),['Peter', is, father, of, 'Guido']), phrase(s(G1,G2),[he, is, a, male]).
G1 = G2, G2 = he