我正在尝试对家谱进行查询,但是当我输入所有信息时,出现语法错误:运算符为预期值。我是Prolog的新手。
域
name=symbol
谓词
parent(name,name)
female(name)
male(name)
sister(name,name)
son(name,name)
father(name)
grandmother(name)
条款
female(stella).
female(lizzy).
female(emily).
female(mia).
female(alice).
male(hubert).
male(ben).
male(john).
male(danny).
male(sam).
parent(stella,ben).
parent(stella,mia).
parent(hubert,ben).
parent(hubert,mia).
parent(lizzy,emily).
parent(lizzy,john).
parent(ben,emily).
parent(ben,john).
parent(mia,sam).
parent(mia,alice).
parent(danny,sam).
parent(danny,alice).
sister(X,Y):-female(X),parent(Par,X),parent(Par,Y),X\==XY.
son(X,Y):-parent(Z,X),parent(Z,Y),male(X),X\==Y.
father(X,Y):-parent(X,Y),male(X).
grandmother(X,Y):-parent(X,Y),female(X)
答案 0 :(得分:0)
这里有两个问题:
.
),表示该子句的结尾;和X\==XY
子句中写了sister/2
,因为XY
是一个新变量,所以总是成功。 grandmother/2
谓词还存在一个语义问题:现在,它定义了一个“母亲”谓词。我将其保留为练习。
我还建议重新格式化您的代码(Prolog不会按行向您收费,它使子句的结尾以及它的作用更加清楚)。
sister(X,Y) :-
female(X),
parent(Par,X),
parent(Par,Y),
X \== Y.
son(X,Y) :-
parent(Z,X),
parent(Z,Y),
male(X),
X \== Y.
father(X,Y) :-
parent(X,Y),
male(X).
grandmother(X,Y) :-
parent(X,Y),
female(X).