【问题标题】:Prolog family tree same generation rulesProlog 家谱同代规则
【发布时间】:2015-02-08 02:27:05
【问题描述】:

我正在上一门编程课,大多数人都是 c++,我们在 Prolog 上上了几节课,导师告诉我们自己研究,这就是我一直在做的。我一直在玩家谱程序,但我在使用相同代的规则时遇到了麻烦。同一代人基本上是兄弟姐妹或堂兄弟。以我现在的方式,

如果我查询:

 same_generation(jill,X). 

我明白了:

false. 

如果我查询:

 same_generation(jack, X). 

我明白了:

X=jack
X=phil 

没错,但吉尔也是同一代人。

任何有关我在该规则中出错的地方的帮助将不胜感激!下面是“家谱”和我的代码。

我只是要抛开规矩,拿出大部分事实来压缩帖子……

mother(lisa,abe). ....

father(tony,abe). ....


parent(X,Y) :-mother(X,Y).
parent(X,Y) :-father(X,Y).

sibling(X,Y) :- father(P,X), father(P,Y), mother(Q,X), mother(Q,Y).

cousin(X,Y) :-parent(A,X), parent(B,Y), sibling(A,B).

same_generation(X,Y) :- sibling(Someone,P), cousin(Someone,X), cousin(P,Y).

【问题讨论】:

  • 吉尔和杰克是堂兄弟。你只考虑兄弟姐妹和堂兄弟。因此它不会发现 Jack 和 Jill 是同代。
  • 有向边代表什么?
  • 也许您可以将same_generation 定义为“有一个共同的祖先N 级以上”。 ancestor(X,Y,N) 的东西,其中 X 是 Y 的祖先,他们之间有 N 人 - 所以父母为零,祖父母为 1,等等。这样,Jill 和 Jack 将来自同一代,因为 Lisa 作为 2 级的祖先. 杰克和菲尔将来自同一代人,因为他们拥有相同的父母。
  • @vmg,这可能还不够(这取决于same_generation 的含义)。例如,Rob 和 Mary 是同一代人,但他们没有共同的祖先。
  • 是的,但我是按照 OP 的说法,即“同一代人本质上是兄弟姐妹或堂兄弟”,这似乎意味着只打算使用“同一家庭的同一代人”。感谢您指出这一点,希望 OP 看到这一点并考虑他是否需要考虑配偶等。

标签: prolog predicate rule


【解决方案1】:

您可以将同一代人定义为共享同一祖父母的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多