搜索所有有条件的父亲在Prolog

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索所有有条件的父亲在Prolog相关的知识,希望对你有一定的参考价值。

我在Prolog中有一个包含下一个事实的家谱计划:

male(alex). 
male(david).
male(peter).
etc
...
female(sofia).
etc
....
parent(alex, peter).
parent(sofia, peter).  
etc
....

和一些规则,如:

father(X, Y) :- parent(X, Y), male(X).
mother(X, Y) :- parent(X, Y), female(X).
etc
....

我需要找到所有有两个或更多孩子的父亲。 我想我需要在我的程序中经历所有父亲,让他们的孩子列出并计算它的长度,然后如果> = 2我将这个父亲添加到另一个列表或者只是打印他并进一步。

答案

虽然在一般情况下,当你想要找到所有至少有N孩子的父亲时,你的方法是必需的,当你只和两个孩子打交道时,可以采用一种更简单的方法:找两个孩子,看看这两个孩子是不是不同。

在Prolog中,此规则如下所示:

father_of_two(X) :-
    father(X, A),
    father(X, B),
    A = B.

您现在需要做的就是将所有匹配father_of_two谓词的人收集到一个列表中。

以上是关于搜索所有有条件的父亲在Prolog的主要内容,如果未能解决你的问题,请参考以下文章

带有先决条件的 Prolog 路径查找

Prolog中的广度优先搜索

片段的条件自定义 OnBackPress

PROLOG通过条件获得名称

条件片段和导航重用

在Prolog中使用广度优先搜索(BFS)解决食人族/传教士?