문제
프롤로그에서 텍스트 어드벤처 게임을 쓰고 있으며 방 출구를 인쇄하고 있습니다. 나는 다음과 같은 코드가있다.
exits_from(Room) :-
connected(Room, X),
write(X), write(' ').
연결된/2는 다음과 같습니다.
connected(X, Y) :- path(X, Y).
connected(X, Y) :- path(Y, X).
그리고 경로는 다음과 같습니다.
path(room, hallway).
path(hallway, foyer).
등등.
그래도 방의 출구를 인쇄 할 때는 첫 번째로 얻은 다음 a ';' 다른 솔루션을 원한다고 말합니다. 어쨌든 술어가 결과를 완전히 계산하도록 강요 할 수있어 플레이어가 더 많은 출구를 계속 요구할 필요가 없습니까?
해결책
한 가지 방법은 같은 일을하는 것입니다
print_all_solutions :-
solution(Sol),
write(Sol),
fail. % this causes backtracking
print_all_solutions. % succed
다른 하나는 다음과 같이 특별한 술어를 사용하는 것입니다.
forall(solution(Sol), write(Sol))
제휴하지 않습니다 StackOverflow