首页 > 解决方案 > 如何正确书写祖父母规则

问题描述

这是我第一次使用 prolog 的家庭作业,我以为我知道自己在做什么,但是当我写一个查询时,它说“程序 `parent(A,B)' 不存在可从:祖父母 (A,B) 访问”。

female(jane).
female(mary).
female(clare).
female(vivian).
female(alice).
female(sarah).
female(rachel).

male(floyd).
male(tom).
male(richard).
male(calvin).
male(john).
male(andrew).

parent_of(tom, richard).
parent_of(tom, jane).
parent_of(mary, calvin).
parent_of(mary, alice).
parent_of(clare, john).
parent_of(clare, tom).
parent_of(john, alice).
parent_of(john, calvin).
parent_of(richard, vivian).
parent_of(richard, floyd).
parent_of(jane, sarah).
parent_of(jane, rachel).
parent_of(jane, andrew).

grandparent(X,Z):-parent(X,Y),parent(Y,Z).
sister_of(X,Y):-parent(Z,X),parent(Z,Y),female(X),X\==Y.
brother_of(X, Y):-parent(Z,X),parent(Z,Y),male(X),X\==Y.

标签: prolog

解决方案


您将谓词声明为

parent_of/2

再看看你的代码

parent_of(tom, richard).
parent_of(tom, jane).
parent_of(mary, calvin).
parent_of(mary, alice).
parent_of(clare, john).
parent_of(clare, tom).
[...]

因此,您还必须在祖父母谓词中使用 parent_of,如下所示:

grandparent(X,Z):-parent_of(X,Y),parent_of(Y,Z).

请注意,您还必须更改以下谓词(sister_of 和 Brother_of):

sister_of(X,Y):-parent_of(Z,X),parent_of(Z,Y),female(X),X\==Y.
brother_of(X, Y):-parent_of(Z,X),parent_of(Z,Y),male(X),X\==Y.

推荐阅读