#prolog
Задача:
Три друга – Петр, Роман и Сергей учатся на математическом, физическом
и химическом факультетах университета.
Если Петр математик, то Сергей не физик.
Если Роман не физик, то Петр – математик.
Если Сергей не математик, то Роман – химик.
Определите специальность Сергея.
Код:
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).
При запуске данного кода выскакивает следующая ошибка:
Как можно исправить данную ошибку и есть ли у этой задачки какое-либо другое решение
на прологе?
Ответ у задачки должен быть такой: Петр - химик, Роман - физик, Сергей - математик
Ответы
Ответ 1
Используй вместо <> конструкцию 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).
Комментариев нет:
Отправить комментарий