Изменить вывод в программе - Prolog

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

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

Программа решает логическую задачу о миссионерах и каннибалах. Условие:
Спойлер
Код:
Листинг программы
  1. % const: [0,0,0]-finish, [1,3,3]- start.
  2. % +start, -ans
  3. go(List,Out):-
  4. findall(X,theEnd(List,X),Out),
  5. not(Out=[]),
  6. !.
  7. go(List,Out):-
  8. findall(X,move(List,X),Xl),
  9. !,
  10. go(Xl,Out).
  11. %+list, +start
  12. theEnd(List,[[1,3,3]|A]):-
  13. member([[1,3,3]|A],List).
  14. %+list, +list_states
  15. move(List,[[C ,Mn,Kn],[A,M,K]|W]):-
  16. member([[A,M,K]|W],List),
  17. C is 1-A,
  18. Z is C-A,
  19. d(Dm,Dk),
  20. Mn is M+Z*Dm,
  21. Mn>=0, 3>=Mn,
  22. Kn is K+Z*Dk,
  23. Kn>=0,
  24. 3>=Kn,
  25. check(Mn,Kn),
  26. not(member([C,Mn,Kn],W)).
  27. %+posible states
  28. d(1,0).
  29. d(2,0).
  30. d(1,1).
  31. d(0,1).
  32. d(0,2).
  33. %+missioner_state, +state_kannibal
  34. check(M,K):-
  35. M=\=0,
  36. K>M ,
  37. !,
  38. fail.
  39. check(M,K):-
  40. M=\=3,
  41. 3-K>3-M,
  42. !,
  43. fail.
  44. check(_,_).
  45. member(A,[A|_]).
  46. member(A,[_|B]):-
  47. member(A,B).
запрос:
Листинг программы
  1. ?-go([[[0,0,0]]],X),write(X).
Программа выводит перечень перемещений (скрин ниже) Нужно сделать чтобы ответы выводило пошагово, а не сразу весь список, то есть должно выводиться так:
Листинг программы
  1. X=[1,3,3];
  2. X=[0,2,2];
  3. ...
Просьба помочь, спасибо.

Решение задачи: «Изменить вывод в программе»

textual
Листинг программы
  1. writelist([]).
  2. writelist([H|T]) :-
  3.     write("X = "), write(H), write(";"), nl,
  4.     writelist(T).
  5.  
  6. ?-go([[[0,0,0]]],X), writelist(X).

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


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

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

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

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

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

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