2

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

我目前对解决方案的理解是在当前分支中搜索匹配项,如果没有匹配项则继续下一个分支。

例如:

           Peter
    Alf,            Bert
Sam,   Tom,   George,    Sally 

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

当我们迭代树时,这个逻辑就会应用。例如,要查看 Sally 和 Tom 是否相关,首先我们检查他们是否是兄弟姐妹,如果不是,则检查他们父母的兄弟姐妹等等。

我确实有诸如 cousin、uncle 等谓词可以检查这样的事情,但问题是可伸缩性。为曾曾祖父创建谓词似乎是不合逻辑的,因为我可以使用某种递归来检查它们是否与血缘有关。

提前致谢 :)

编辑:

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

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.

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

4

0 回答 0