2014-05-17 2 views
0

프롤로그를 처음 접했을 때 처음부터 해결책을 찾아 내고 절차 적 또는 기능적 방법으로 생각하지 않는 것이 매우 어렵다는 점을 말씀드립니다.프롤로그 절차

문제의 컨텍스트는 다음과 같습니다. 초기 위치 (0,0)에서 시작하여 네 방향으로 이동해야합니다. 내가 위로 올라갈 때 내 위치를 (0,1)로, (0, -1)로, (-1,0)에서 왼쪽으로 (1, 0)으로 업데이트합니다. 어떤 시점에서 나는 나의 초기 위치로 돌아 가야한다.

내가하는 모든 동작을 암기하여 문제를 해결 한 다음 그 반대의 작업을 수행했습니다. 그래서 내가했던 움직임이 아래로 내려 간다면, 나는 서쪽으로 올라간다. 해결책은 효과가 있지만 매우 비효율적이며 바보입니다.

그래서 내가하고 싶은 건 현재 위치 (X, Y)를 취하고 위치를 업데이트하여 (0,0)에 가까워지면 네 가지 동작 중 하나를 평가하는 절차를 만드는 것입니다.

나는 약간의 코드를 작성하려고 노력했지만 사실은 프롤로그에서 문제를 생각하는 방법을 모른다. 누군가가 내게 그것을 해결할 수있는 힌트를 줄 수 있습니까? 고맙습니다!

답변

0

먼저 이동 가능한 법적 방향을 나타내는 방법이 필요합니다. 간단한 해결책은 원자를 사용하는 것입니다. up, down, leftright. 다음으로, 위치와 방향이 주어지면 결과 위치를 계산하는 술어를 정의 할 수 있습니다. 예 :

move((X,Y), up, (X,NewY)) :- NewY is Y + 1. 
... 

예를 들어 이동 순서를 수행하려는 경우 [up, left, up, up, right, down]을 사용하면 시퀀스와 초기 위치를 취하고 모든 중간 위치를 추적하면서 (추가 인수 사용) 최종 위치를 계산하는 다른 조건자를 정의 할 수 있습니다. 다른 방법으로는 시퀀스를 거꾸로 조작하여 움직임을 역 추적 할 수도 있습니다. 그것을 시도하고 결과로 질문을 업데이트 할 수 있습니까?