如何在此Prolog程序中调试“期望操作员”?

时间:2018-10-10 03:22:35

标签: prolog

我正在尝试对家谱进行查询,但是当我输入所有信息时,出现语法错误:运算符为预期值。我是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)

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 您在结尾处忘记了句点(.),表示该子句的结尾;和
  2. 这并不是真正的错误,但是您在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).