문제

프롤로그에서 텍스트 어드벤처 게임을 쓰고 있으며 방 출구를 인쇄하고 있습니다. 나는 다음과 같은 코드가있다.

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))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top