Изменить вывод в программе - Prolog
Формулировка задачи:
Программа решает логическую задачу о миссионерах и каннибалах.
Условие:
Код:
запрос:
Программа выводит перечень перемещений (скрин ниже)
Нужно сделать чтобы ответы выводило пошагово, а не сразу весь список, то есть должно выводиться так:
Просьба помочь, спасибо.
Спойлер
Листинг программы
- % const: [0,0,0]-finish, [1,3,3]- start.
- % +start, -ans
- go(List,Out):-
- findall(X,theEnd(List,X),Out),
- not(Out=[]),
- !.
- go(List,Out):-
- findall(X,move(List,X),Xl),
- !,
- go(Xl,Out).
- %+list, +start
- theEnd(List,[[1,3,3]|A]):-
- member([[1,3,3]|A],List).
- %+list, +list_states
- move(List,[[C ,Mn,Kn],[A,M,K]|W]):-
- member([[A,M,K]|W],List),
- C is 1-A,
- Z is C-A,
- d(Dm,Dk),
- Mn is M+Z*Dm,
- Mn>=0, 3>=Mn,
- Kn is K+Z*Dk,
- Kn>=0,
- 3>=Kn,
- check(Mn,Kn),
- not(member([C,Mn,Kn],W)).
- %+posible states
- d(1,0).
- d(2,0).
- d(1,1).
- d(0,1).
- d(0,2).
- %+missioner_state, +state_kannibal
- check(M,K):-
- M=\=0,
- K>M ,
- !,
- fail.
- check(M,K):-
- M=\=3,
- 3-K>3-M,
- !,
- fail.
- check(_,_).
- member(A,[A|_]).
- member(A,[_|B]):-
- member(A,B).
Листинг программы
- ?-go([[[0,0,0]]],X),write(X).
Листинг программы
- X=[1,3,3];
- X=[0,2,2];
- ...
Решение задачи: «Изменить вывод в программе»
textual
Листинг программы
- writelist([]).
- writelist([H|T]) :-
- write("X = "), write(H), write(";"), nl,
- writelist(T).
- ?-go([[[0,0,0]]],X), writelist(X).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д