Страницы

Поиск по вопросам

среда, 13 марта 2019 г.

Решение логической задачки на прологе

Задача:
Три друга – Петр, Роман и Сергей учатся на математическом, физическом и химическом факультетах университета. Если Петр математик, то Сергей не физик. Если Роман не физик, то Петр – математик. Если Сергей не математик, то Роман – химик.
Определите специальность Сергея.
Код:
domains dep=symbol predicates faculty(dep) cond1(dep, dep) cond2(dep, dep) cond3(dep, dep) solve(dep, dep, dep) % Peter, Roman, Sergey clauses faculty(physics). faculty(math). faculty(chemistry).
cond1(Fa1, Fa3):- Fa1=math, Fa3<>physics.
cond2(Fa2, Fa1):- Fa2<>physics, Fa1=math.
cond3(Fa3, Fa2):- Fa3<>math, Fa2=chemistry.
solve(Fa1, Fa2, Fa3):- faculty(Fa1), faculty(Fa2), faculty(Fa3), Fa1<>Fa2, Fa2<>Fa3, Fa1<>Fa3, cond1(Fa1, Fa3); cond2(Fa2, Fa1); cond3(Fa3, Fa2).
При запуске данного кода выскакивает следующая ошибка:

Как можно исправить данную ошибку и есть ли у этой задачки какое-либо другое решение на прологе? Ответ у задачки должен быть такой: Петр - химик, Роман - физик, Сергей - математик


Ответ

Используй вместо <> конструкцию not(a=b).
domains dep=symbol predicates faculty(dep) cond1(dep, dep) cond2(dep, dep) cond3(dep, dep) solve(dep, dep, dep) % Peter, Roman, Sergey clauses faculty(physics). faculty(math). faculty(chemistry).
cond1(Fa1, Fa2):- Fa1=math, not(Fa2=physics). cond1(Fa1, _):- not(Fa1=math).
cond2(Fa1, Fa2):- not(Fa1=physics), Fa2=math. cond2(physics, _).
cond3(Fa1, Fa2):- not(Fa1=math), Fa2=chemistry. cond3(math, _).
solve(Fa1, Fa2, Fa3):- faculty(Fa1), faculty(Fa2), faculty(Fa3), Fa1<>Fa2, Fa2<>Fa3, Fa1<>Fa3, cond1(Fa1, Fa3), cond2(Fa2, Fa1), cond3(Fa3, Fa2). goal solve(Fa1, Fa2, Fa3), write(Fa1),nl, write(Fa2),nl, write(Fa3).

Комментариев нет:

Отправить комментарий