Ошибки с задачей Visual Prolog 7.5

Узнай цену своей работы

Формулировка задачи:

В общем сама задача 1. Корнеев, Докшин, Матвеев и Скобелев – жители одного города. Их профессии – пекарь, врач, инженер и офицер полиции. Корнеев и Докшин – соседи и всегда на работу ездят вместе. Докшин старше Матвеева. Корнеев регулярно обыгрывает Скобелева в пинг-понг. Пекарь на работу всегда ходит пешком. Офицер полиции не живет рядом с врачом. Инженер и офицер полиции встречались единственный раз, когда последний оштрафовал инженера за нарушение правил уличного движения. Офицер полиции старше врача и инженера. Определите, кто и чем занимается. (Ответ: офицер полиции – Скобелев; Матвеев – пекарь; Корнеев – врач; Докшин – инженер). Хотел начать мучиться писать сам, но на этом форуме нашел код и переделываю ее под Visual Prolog 7.5, но она под старый пролог со старым синтаксисом.. Prolog - «Определите профессии» Сообщение №2 Мои наброски:
Ошибки на данный момент: Просто напишите пожалуйста как исправить ошибки, сам тут очень слаб, уже час пытаюсь и не получается

Решение задачи: «Ошибки с задачей Visual Prolog 7.5»

textual
Листинг программы
implement main
    open core, console, string
domains
 
class facts
man:(string).
prof:(string).
class predicates
solve:(string, string) nondeterm anyflow.
clauses
man("Корнеев"). man("Докшин"). man("Матвеев").man("Скобелев").
prof("Офицер"). prof("Пекарь"). prof("Врач").prof("Инженер").
 
%Корнеев не пекарь и не офицер, потому что пекарь ходит пешком, а офицер не живет с врачом.
 
solve(X, Y):- man(X), prof(Y),
X="Корнеев"
, Y<>"Пекарь", Y<>"Офицер".
 
%Докшин не офицер потому что младше его и не пекарь потому что старше его.
solve(X, Y):- man(X), prof(Y),
X="Докшин"
, Y<>"Офицер", Y<>"Пекарь".
 
%Скобелев не инженер, потому что инженер либо Корнеев, Матвеев или Докшин
solve(X, Y):- man(X), prof(Y),
X="Скобелев"
, Y<>"Инженер".
 
%мареев не офицер потому что докшин старше мареева и Кореева
solve(X, Y):- man(X), prof(Y),
X="Матвеев"
, Y<>"Офицер".
 
 
 
solve(X, Y):- man(X), prof(Y).
 
clauses
run() :-
init(),
solve("Корнеев", Y1),
solve("Докшин", Y2),
solve("Матвеев", Y3),
solve("Скобелев", Y4),
Y1<>Y2, Y2<>Y3, Y1<>Y4,Y3<>Y4,Y2<>Y4,Y1<>Y3,
write("Корнеев ",  Y1), nl,write("Докшин ", Y2), nl,write("Матвеев ", Y3),nl,write("Скобелев ", Y4),_=readLine(),!;_=readLine().
end implement main
 
goal
console::run(main::run).

Объяснение кода листинга программы

В данном коде на языке Prolog реализуется задача, связанная с принадлежностью людей к определенным профессиям и ограничениями между этими профессиями.

  1. В первой части кода определяются два домена: man (люди) и prof (профессии).
  2. Затем определяются три класса фактов: man, prof и class facts.
  3. Далее определяются три класса предикатов: solve и clauses.
  4. В части clauses задаются ограничения на профессии людей. Например, Корнеев не может быть пекарем или офицером, потому что пекарь ходит пешком, а офицер не живет с врачом.
  5. В части solve задаются условия для определения профессий людей. Например, если человек - Корнеев, то его профессия не может быть инженером, потому что инженер либо Корнеев, либо Матвеев или Докшин.
  6. В части clauses задаются условия для проверки ограничений между профессиями людей. Например, Матвеев не может быть офицером, потому что Докшин старше Мареева и Корнеева.
  7. В части run задается функция, которая проверяет все ограничения и выводит результат на экран.
  8. В части goal задается цель выполнения программы - запуск функции run для модуля main.
  9. В конце кода идет чтение строки с помощью функции _=readLine(). Таким образом, данный код реализует задачу, связанную с определением профессий людей и ограничений между этими профессиями.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5