用prolog中的提示生成规则

用prolog中的提示生成规则,prolog,zebra-puzzle,Prolog,Zebra Puzzle,我有口译员和语言 interpreter(fran,french). interpreter(geraldine,german). interpreter(dudley,dutch). interpreter(spike,spanish). interpreter(polly,polish). interpreter(ron,romanian). language(french). language(german). language(dutch). language(spanish). la

我有口译员和语言

interpreter(fran,french).
interpreter(geraldine,german).
interpreter(dudley,dutch).
interpreter(spike,spanish).
interpreter(polly,polish).
interpreter(ron,romanian).

language(french).
language(german).
language(dutch).
language(spanish).
language(polish).
language(romanian).
规则是: 没有口译员说同一种语言


有什么帮助吗?

一种方法是首先检查两名口译员是否讲同一种语言,然后检查该规则的否定是否正确

rule2 :- not(nrule2(X, Y)).
nrule2(X, Y) :- interpreter(X, L1), interpreter(Y, L2), X \= Y, L1 = L2.

只有当没有两名口译员说同一种语言时,上述规则2才是正确的。

一种方法是首先检查是否有两名口译员说同一种语言,然后检查该规则的否定是否正确

rule2 :- not(nrule2(X, Y)).
nrule2(X, Y) :- interpreter(X, L1), interpreter(Y, L2), X \= Y, L1 = L2.

只有在没有两个口译员说同一种语言的情况下,上述规则2才适用。

对不起,我忘了提到“口译员”中的第二个输入是他们的姓氏,而不是他们所说的语言。我将编辑并删除他们的姓氏如果你从谓词中删除所说的语言,那么如何确定解释器所说的语言?一定有办法把口译员和一种语言联系起来。我明白你的意思。这只是一个问题的一部分,我发布了这个问题,但没有得到任何解决方案。这是整个图像:看起来您已经构建了规则谓词,以接受一个列表[X,Y,Z,W],其中X,Y对应于名称,Z,W对应于语言。但基于这个问题,您需要的解决方案是这些列表的列表(即,人员和他们所说语言的列表)。因此,您可能需要重新构造规则,以接受列表列表,并确保该列表中的每个列表都符合规则。好的,我试试看。由于您的第一个答案在编辑之前是正确的,我将重新编辑并接受您的答案。谢谢对不起,但我忘了提到“口译员”中的第二个输入是他们的姓氏,而不是他们所说的语言。我将编辑并删除他们的姓氏如果你从谓词中删除所说的语言,那么如何确定解释器所说的语言?一定有办法把口译员和一种语言联系起来。我明白你的意思。这只是一个问题的一部分,我发布了这个问题,但没有得到任何解决方案。这是整个图像:看起来您已经构建了规则谓词,以接受一个列表[X,Y,Z,W],其中X,Y对应于名称,Z,W对应于语言。但基于这个问题,您需要的解决方案是这些列表的列表(即,人员和他们所说语言的列表)。因此,您可能需要重新构造规则,以接受列表列表,并确保该列表中的每个列表都符合规则。好的,我试试看。由于您的第一个答案在编辑之前是正确的,我将重新编辑并接受您的答案。谢谢