ntiles 문제를 해결하기 위해 노력하고 있습니다. 그리드가 있습니다. 그리드에 주어진 크기의 N 개의 타일을 찾고자합니다. 우리는 다음과 같은 규칙이 :그리드에 n 개의 타일을 찾는 방법 - 프롤로그
ntiles(A/B, Grid, N, Pos1/Pos2) :-
그리고 우리가 타일을 찾을 수있는 가능한 위치를 반환해야합니다 :
>ntiles(2/1,3,2,P).
P=[1/1,1/3]?;
P=[1/1,2/3]?;
P=[2/1,1/3]?;
P=[2/1,2/3]?;
No.
나는 간단한 재귀 문제가 있지만 그것을 해결하기 위해 관리 couldnt는 생각합니다. 먼저 1/1 위치에서 시작하는 단일 행에서만 타일을 찾으려고했습니다. 이것은 내가 현재 첫 행에 머물러 있다는 것을 의미합니다. 나는 이것을 달성하면 칼럼을 구현하기가 쉽다고 생각했다. 당신이 내 코드를 검사 할 때
당신은 나를 이해합니다
ntiles(A/B, G, N, K) :-
setof(X/Y, horizontal(A/B, G, N, X/Y), K).
horizontal(A/B, G, N, P1/P2) :-
N > 0,
P is A + 2,
P =< G,
horizontal(A/B, G, N-1, P/1).
이 코드를 반환 '거짓'. 나는 그것을 K의 목록으로 되돌릴 것으로 예상했다. 당신은 문제가 어디 있는지 생각하고 있는가?
이 문제를 해결하기 위해 통찰력을 줄 수 있습니까?
미리 감사드립니다.