Prolog家族树血缘关系,递归?

时间:2014-02-18 12:41:42

标签: recursion prolog family-tree transitive-closure

我需要一个递归函数来查找家谱中的所有血亲。但老实说,我不知道如何在Prolog中实现这一点。

我目前对解决方案的理解是搜索当前分支进行匹配,如果没有匹配则进入下一个分支。

例如:

           Peter
    Alf,            Bert
Sam,   Tom,   George,    Sally 

要检查Tom和sam是否相关,我们只需通过查找所有兄弟节点(检查父节点并检查所有子元素)来检查第一个分支。

然后,当我们迭代树时,此逻辑适用。例如,要查看Sally和Tom是否相关,首先我们检查他们是否是兄弟姐妹,如果没有,那么检查他们父母的兄弟姐妹等等。

我确实有堂兄,叔叔等谓词,可以检查这样的事情,但问题是可扩展性。为伟大的曾祖父创造谓词似乎是不合逻辑的,当我可以采用某种递归来检查它们是否与血液有关。

提前致谢:)

编辑:

以下是一些基本事实/谓词来说明我接近的角度:

woman(sally).
woman(betty).
man(john).
man(tom).

parent(tom, john).
parent(sally, betty).

sibling(A, B) :-
    parent(C, A),
    parent(C, B),
    A \= B.

我有更多的用于树,但我不认为它们与这个问题有关。

0 个答案:

没有答案