如何在序言中找到曾曾曾祖母

  • 本文关键字:曾曾 曾祖母 prolog
  • 更新时间 :
  • 英文 :


我是prolog的新手,我正在尝试编写家谱我得到了获取父母、母亲、父亲、姐姐、哥哥等的代码。。我正在尝试编写代码以获得曾曾曾祖母的

我有这个代码来获取曾祖母:

great_grandmother(X,Y) :- parent(X,V), parent(V,W), parent(W,Y), female(X).

然而,我曾多次试图找到曾曾曾祖母,但都没有成功。我将如何修改我的代码以获得曾曾曾祖母?

当我在swish.swi上运行代码时,我得到了所有正确的曾祖母,但程序一直在运行,它给了我错误的信息。有没有办法根据我的代码来修复它,以获得曾祖母?

您的代码基于这样一种方法,即曾祖母本质上是父母的母亲。同样,曾曾曾祖母也是父母的母亲:

great_great_grandmother(X,Z) :- parent(X,V), parent(V,W), parent(W,Y), parent(Y,Z), female(X).

为了打破这种逻辑,你可以将一切限制为成对的二元关系,比如祖父母是父母的父母,曾祖父母是祖父母的父母,等等,如:

parent(X,Y) :- child(Y,X).
grandparent(X,Y) :- parent(X,Y), parent(Y,Z).
great_grandparent :- parent(X,Y), grand_parent(Y,Z).
great_great_grandparent(X,Y) :- parent(X,Y), great_grandparent(Y,Z).

然后一位曾曾祖母就是一位女性曾曾祖父母:

great_great_grandmother(X,Y) :- great_great_grandparent(X,Y), female(X).

至于为什么你的查询没有得到解决方案,这完全取决于你的事实。great_great_grandparent谓词格式错误,或者模型中没有该定义的实体,或者两者都有。

最新更新