Я пытаюсь решить проблему 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.
Я думаю, что это просто рекурсивная проблема, но я не мог управлять, чтобы решить эту проблему. Сначала я попытался найти плитки только в одной строке, начиная с позиции 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).
Это коды возвращает «ложь». Я ожидал вернуть ему список К. У вас есть идея, что проблема?
Также вы можете дать мне понимание, чтобы решить эту проблему?
Заранее спасибо.