#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).
Комментариев нет:
Отправить комментарий