Объясните задачу про волка, козу и капусту - Prolog

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

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

Здравствуйте! Я прошу у Вас помощи, на

SWI Prolog

нашла решение задачи про

волка, козу и капусту

, но не знаю

какой вопрос задать

, что бы программа выдала мне ответ. Вот собственно решение:
Листинг программы
  1. состояние(правый,правый,правый,правый,_):-
  2. write('Приехали'),nl,
  3. write('Итоговая последовательность действий в обратном порядке:'),nl.
  4. состояние(Человек,Волк,Коза,_,_):-
  5. Волк=Коза,not(Коза=Человек),write('Козу съели'),nl,!,fail.
  6. состояние(Человек,_,Коза,Капуста,_):-
  7. Капуста=Коза,not(Коза=Человек),write('Капусту съели'),nl,!,fail.
  8. состояние(правый,Волк,Коза,Капуста,Последний):-
  9. not(Последний=ничего),write('Поехали порожняком на левый'),nl,
  10. состояние(левый,Волк,Коза,Капуста,ничего),write('Поехали порожняком на левый'),nl.
  11. состояние(Вместе,Вместе,Коза,Капуста,Последний):-
  12. not(Последний=волк),напротив(Вместе,Другой),
  13. write('Повезли волка на'),write(Другой),nl,
  14. состояние(Другой,Другой,Коза,Капуста,волк),
  15. write('Повезли волка на '),write(Другой),nl.
  16. состояние(Вместе,Волк,Вместе,Капуста,Последний):-
  17. not(Последний=коза),напротив(Вместе,Другой),
  18. write('Повезли козу на '),write(Другой),nl,
  19. состояние(Другой,Волк,Другой,Капуста,коза),
  20. write('Повезли козу на '),write(Другой),nl.
  21. состояние(Вместе,Волк,Коза,Вместе,Последний):-
  22. not(Последний=капуста),напротив(Вместе,Другой),
  23. write('Повезли капусту на '),write(Другой),nl,
  24. состояние(Другой,Волк,Коза,Другой,капуста),
  25. write('Повезли капусту на '),write(Другой),nl.
  26. состояние(левый,Волк,Коза,Капуста,Последний):-
  27. not(Последний=ничего),
  28. write('Поехали порожняком на правый'),nl,
  29. состояние(правый,Волк,Коза,Капуста,ничего),
  30. write('Поехали порожняком на правый'),nl.
  31. напротив(правый,левый).
  32. напротив(левый,правый).
  33. goal:-состояние(левый,левый,левый,левый,ничего).

Я это решение перевела на английский язык, что бы SWI Prolog смог почитать его:

Листинг программы
  1. condition(right,right,right,right,_):-
  2. write('came'),nl,
  3. write('Final procedure in reverse order:'),nl.
  4. condition(Man,Wolf,Goat,_,_):-
  5. Wolf=Goat,not(Goat=Man),write('the Goat ate'),nl,!,fail.
  6. condition(Man,_,Goat,Cabbage,_):-
  7. Cabbage=Goat,not(Goat=Man),write('Cabbage ate'),nl,!,fail.
  8. condition(right,Wolf,Goat,Cabbage,Last):-
  9. not(Last=none),write('Went empty on the left'),nl,
  10. condition(left,Wolf,Goat,Cabbage,nothing),write('Went empty on the left'),nl.
  11. condition(Together,Together,Goat,Cabbage,Last):-
  12. not(Last=wolf),opposite(Together,Other),
  13. write('Drove the wolf'),write(Another),nl,
  14. condition(Other,Another,Goat,Cabbage,wolf),
  15. write('Drove the wolf '),write(Another),nl.
  16. condition(Together,Wolf,Together,Cabbage,Last):-
  17. not(Last=goat),opposite(Together,Other),
  18. write('Drove the goat '),write(Another),nl,
  19. condition(Other, Wolf, Other,Cabbage,goat),
  20. write('Drove the goat '),write(Another),nl.
  21. condition(Together,wolf,Goat,Together,Last):-
  22. not(Last=cabbage),opposite(Together,Other),
  23. write('was Taken cabbage '),write(Another),nl,
  24. condition(Other,wolf,Goat,Another,cabbage),
  25. write('was Taken cabbage '),write(Another),nl.
  26. condition(left,Wolf,Goat,Cabbage,Last):-
  27. not(Last=none),
  28. write('Went empty on the right'),nl,
  29. condition(right,Wolf,Goat,Cabbage,nothing),
  30. write('Went empty on the right'),nl.
  31. front(right,left).
  32. front(left,right).
Подскажите пожалуйста,

верное ли решение и какой вопрос нужно задать

.

Спасибо Вам заранее!!!

Решение задачи: «Объясните задачу про волка, козу и капусту»

textual
Листинг программы
  1. ?- ['goat'].
  2. % goat compiled 0.00 sec, 136 bytes
  3. true.
  4.  
  5. ?- condition(left,left,left,left,none).
  6. Drove the wolf to right
  7. Cabbage ate
  8. Drove the goat to right
  9. Went empty on the left
  10. Drove the wolf to right
  11. Went empty on the left
  12. the Goat ate
  13. Drove the goat to left
  14. Drove the cabbage to right
  15. Went empty on the left
  16. Drove the goat to right
  17. came
  18. Final procedure in reverse order:
  19. Drove the goat to right
  20. Went empty on the left
  21. Drove the cabbage to right
  22. Drove the goat to left
  23. Drove the wolf to right
  24. Went empty on the left
  25. Drove the goat to right
  26. true .

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

  1. В данном коде используется язык программирования Prolog.
  2. Задача, которую решает данный код, - это задача о волке, козе и капусте.
  3. В коде присутствует функция condition, которая принимает на вход четыре аргумента left, left, left, left и none.
  4. В процессе выполнения функции condition происходит перемещение козы (goat) и волка (wolf) между левой и правой сторонами, а также поедание капусты (cabbage).
  5. В результате выполнения функции condition получается последовательность действий:
    • Сначала волка (wolf) гонят на правую сторону.
    • Затем коза (goat) съедает капусту (cabbage).
    • После этого волка (wolf) снова гонят на правую сторону.
    • Затем коза (goat) переходит на левую сторону.
    • Затем снова волка (wolf) гонят на правую сторону.
    • И так далее, пока все капусты (cabbage) не будут съедены.
  6. В конце выполнения функции condition получается сообщение Final procedure in reverse order, что означает, что все козы (goat) и волки (wolf) находятся на правой стороне, а капуста (cabbage) закончилась.
  7. Код также содержит функцию came, которая, вероятно, отслеживает перемещение коз (goat) и волков (wolf) между сторонами.
  8. В коде присутствуют также сообщения об ошибках, например, Drove the goat to right Went empty on the left, что означает, что коза (goat) была переведена на правую сторону, а затем на левой стороне не осталось ничего.
  9. Код скомпилирован за 0.00 секунд и занимает 136 байт.

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


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

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут