Объясните задачу про волка, козу и капусту - Prolog
Формулировка задачи:
Здравствуйте! Я прошу у Вас помощи, на
Подскажите пожалуйста,
SWI Prolog
нашла решение задачи проволка, козу и капусту
, но не знаюкакой вопрос задать
, что бы программа выдала мне ответ. Вот собственно решение:
Листинг программы
- состояние(правый,правый,правый,правый,_):-
- write('Приехали'),nl,
- write('Итоговая последовательность действий в обратном порядке:'),nl.
- состояние(Человек,Волк,Коза,_,_):-
- Волк=Коза,not(Коза=Человек),write('Козу съели'),nl,!,fail.
- состояние(Человек,_,Коза,Капуста,_):-
- Капуста=Коза,not(Коза=Человек),write('Капусту съели'),nl,!,fail.
- состояние(правый,Волк,Коза,Капуста,Последний):-
- not(Последний=ничего),write('Поехали порожняком на левый'),nl,
- состояние(левый,Волк,Коза,Капуста,ничего),write('Поехали порожняком на левый'),nl.
- состояние(Вместе,Вместе,Коза,Капуста,Последний):-
- not(Последний=волк),напротив(Вместе,Другой),
- write('Повезли волка на'),write(Другой),nl,
- состояние(Другой,Другой,Коза,Капуста,волк),
- write('Повезли волка на '),write(Другой),nl.
- состояние(Вместе,Волк,Вместе,Капуста,Последний):-
- not(Последний=коза),напротив(Вместе,Другой),
- write('Повезли козу на '),write(Другой),nl,
- состояние(Другой,Волк,Другой,Капуста,коза),
- write('Повезли козу на '),write(Другой),nl.
- состояние(Вместе,Волк,Коза,Вместе,Последний):-
- not(Последний=капуста),напротив(Вместе,Другой),
- write('Повезли капусту на '),write(Другой),nl,
- состояние(Другой,Волк,Коза,Другой,капуста),
- write('Повезли капусту на '),write(Другой),nl.
- состояние(левый,Волк,Коза,Капуста,Последний):-
- not(Последний=ничего),
- write('Поехали порожняком на правый'),nl,
- состояние(правый,Волк,Коза,Капуста,ничего),
- write('Поехали порожняком на правый'),nl.
- напротив(правый,левый).
- напротив(левый,правый).
- goal:-состояние(левый,левый,левый,левый,ничего).
Я это решение перевела на английский язык, что бы SWI Prolog смог почитать его:
Листинг программы
- condition(right,right,right,right,_):-
- write('came'),nl,
- write('Final procedure in reverse order:'),nl.
- condition(Man,Wolf,Goat,_,_):-
- Wolf=Goat,not(Goat=Man),write('the Goat ate'),nl,!,fail.
- condition(Man,_,Goat,Cabbage,_):-
- Cabbage=Goat,not(Goat=Man),write('Cabbage ate'),nl,!,fail.
- condition(right,Wolf,Goat,Cabbage,Last):-
- not(Last=none),write('Went empty on the left'),nl,
- condition(left,Wolf,Goat,Cabbage,nothing),write('Went empty on the left'),nl.
- condition(Together,Together,Goat,Cabbage,Last):-
- not(Last=wolf),opposite(Together,Other),
- write('Drove the wolf'),write(Another),nl,
- condition(Other,Another,Goat,Cabbage,wolf),
- write('Drove the wolf '),write(Another),nl.
- condition(Together,Wolf,Together,Cabbage,Last):-
- not(Last=goat),opposite(Together,Other),
- write('Drove the goat '),write(Another),nl,
- condition(Other, Wolf, Other,Cabbage,goat),
- write('Drove the goat '),write(Another),nl.
- condition(Together,wolf,Goat,Together,Last):-
- not(Last=cabbage),opposite(Together,Other),
- write('was Taken cabbage '),write(Another),nl,
- condition(Other,wolf,Goat,Another,cabbage),
- write('was Taken cabbage '),write(Another),nl.
- condition(left,Wolf,Goat,Cabbage,Last):-
- not(Last=none),
- write('Went empty on the right'),nl,
- condition(right,Wolf,Goat,Cabbage,nothing),
- write('Went empty on the right'),nl.
- front(right,left).
- front(left,right).
верное ли решение и какой вопрос нужно задать
.Спасибо Вам заранее!!!
Решение задачи: «Объясните задачу про волка, козу и капусту»
textual
Листинг программы
- ?- ['goat'].
- % goat compiled 0.00 sec, 136 bytes
- true.
- ?- condition(left,left,left,left,none).
- Drove the wolf to right
- Cabbage ate
- Drove the goat to right
- Went empty on the left
- Drove the wolf to right
- Went empty on the left
- the Goat ate
- Drove the goat to left
- Drove the cabbage to right
- Went empty on the left
- Drove the goat to right
- came
- Final procedure in reverse order:
- Drove the goat to right
- Went empty on the left
- Drove the cabbage to right
- Drove the goat to left
- Drove the wolf to right
- Went empty on the left
- Drove the goat to right
- true .
Объяснение кода листинга программы
- В данном коде используется язык программирования Prolog.
- Задача, которую решает данный код, - это задача о волке, козе и капусте.
- В коде присутствует функция condition, которая принимает на вход четыре аргумента left, left, left, left и none.
- В процессе выполнения функции condition происходит перемещение козы (goat) и волка (wolf) между левой и правой сторонами, а также поедание капусты (cabbage).
- В результате выполнения функции condition получается последовательность действий:
- Сначала волка (wolf) гонят на правую сторону.
- Затем коза (goat) съедает капусту (cabbage).
- После этого волка (wolf) снова гонят на правую сторону.
- Затем коза (goat) переходит на левую сторону.
- Затем снова волка (wolf) гонят на правую сторону.
- И так далее, пока все капусты (cabbage) не будут съедены.
- В конце выполнения функции condition получается сообщение
Final procedure in reverse order
, что означает, что все козы (goat) и волки (wolf) находятся на правой стороне, а капуста (cabbage) закончилась. - Код также содержит функцию came, которая, вероятно, отслеживает перемещение коз (goat) и волков (wolf) между сторонами.
- В коде присутствуют также сообщения об ошибках, например,
Drove the goat to right Went empty on the left
, что означает, что коза (goat) была переведена на правую сторону, а затем на левой стороне не осталось ничего. - Код скомпилирован за 0.00 секунд и занимает 136 байт.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д