【发布时间】:2021-10-18 22:10:14
【问题描述】:
编写一个程序,当给定参考人和学位时,该程序可以告诉我该人拥有的所有第 n 个学位表亲。我从写我的事实开始:男/1女/1和孩子/2这些都是我家人的名字。然后我开始为堂兄弟写规则,我想我会为每个学位写不同的规则,所以只有第三代堂兄弟。我遇到的问题如下。
-
firstCousin_of(X,Y):-child(X,Z1),child(Y,Z2),child(Z1,Z),child(Z2,Z).我有这个可以找到第一个表亲,但第二个表亲更复杂,这让我觉得必须有一种方法可以递归地做到这一点。 - 我需要规则
all_cousins(Person, Degree, ListOfCousins),它在找出所有第 n 级表亲后编辑所有表亲列表以仅包括那些特定的第 n 级表亲。我已经习惯了命令式语言,我所能想到的就是如何将人们从列表中删除的规则传达给另一个规则。 - 最后我有一条规则,
all_cousinsRemoved(Person, Degree, removed(Number, Direction), ListOfCousins),我什至不知道从哪里开始,但我需要 all_cousins 规则,因为它做同样的事情,但也只包括编辑列表中的表亲 w=that被向上或向下删除第 n 次。
【问题讨论】:
-
我有一个建议:由于 Stackoverflow 确实不是解决此类问题的最佳场所,请尝试使用邮件列表。例如 comp.lang.prolog 或 swi-prolog.discourse.group。您在这里有非常有效的问题,只是不适合这个地方。
-
@TA_intern 虽然可以在swi-prolog.discourse.group 向初学者提问,但他们可能不会得到回答,因为我们不在那里教授介绍性 Prolog。见:Welcome page。 IMO 正确的选择是给
Needs more foucus投票。 -
广告1:你是不是要承认每个人都是selfsame的堂兄,有祖父母?
-
@TA_intern:为什么不能在 SO 上回答这个问题?
-
@false 是的,如果他们有一个祖父母,每个人都是堂兄弟。其他关系(例如两次删除的第二个表亲)变得更加复杂,这就是为什么我不认为我的实现是最好的方法。
标签: prolog relationship