Как отладить «оператор, ожидаемый» в этой программе Prolog? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь выполнить запрос для семейного древа, но когда я ввожу всю информацию, я получаю синтаксическую ошибку: ожидается оператор.Я новичок в Прологе.

домены

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 голосов
/ 10 октября 2018

Здесь есть две проблемы:

  1. вы забыли точку (.) в конце, что сигнализирует об окончании предложения;и
  2. на самом деле это не ошибка, но вы пишете X\==XY в предложении sister/2, поскольку XY - новая переменная, всегда будет успешным.

Существует также семантическая проблема с предикатом grandmother/2: сейчас он определяет предикат "mother".Я оставляю это как упражнение.

Я также советую переформатировать ваш код (Пролог не взимает с вас плату за строку, и он делает более понятным, где заканчивается предложение и что он делает).

sister(X,Y) :-
    female(X),
    parent(Par,X),
    parent(Par,Y),
    X \== <b>Y</b>.

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)<b>.</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...