Ошибки с задачей 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 реализуется задача, связанная с принадлежностью людей к определенным профессиям и ограничениями между этими профессиями.
- В первой части кода определяются два домена:
man
(люди) иprof
(профессии). - Затем определяются три класса фактов:
man
,prof
иclass facts
. - Далее определяются три класса предикатов:
solve
иclauses
. - В части
clauses
задаются ограничения на профессии людей. Например, Корнеев не может быть пекарем или офицером, потому что пекарь ходит пешком, а офицер не живет с врачом. - В части
solve
задаются условия для определения профессий людей. Например, если человек - Корнеев, то его профессия не может быть инженером, потому что инженер либо Корнеев, либо Матвеев или Докшин. - В части
clauses
задаются условия для проверки ограничений между профессиями людей. Например, Матвеев не может быть офицером, потому что Докшин старше Мареева и Корнеева. - В части
run
задается функция, которая проверяет все ограничения и выводит результат на экран. - В части
goal
задается цель выполнения программы - запуск функцииrun
для модуляmain
. - В конце кода идет чтение строки с помощью функции
_=readLine()
. Таким образом, данный код реализует задачу, связанную с определением профессий людей и ограничений между этими профессиями.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д