Итак, моя проблема в следующем: я хочу, учитывая некоторую точку с X, Y-координатами в сетке, вернуть все свои соседние ячейки.ECLiPSe clp: получение всех смежных ячеек в сетке
(Примечание: в следующих примерах я использую обозначение UL = верхний левый, UM = верхний-средний, UR = верхний правый, L = левый, R = правый, BL = нижний левый, БМ = нижний средний и BR = нижний правый)
Например:.
Для элемента х в точке (3,3) на сетке 5х5
_ _ _ _ _
_ UL UM UR _
_ L x R _
_ BL BM BR _
_ _ _ _ _
Для Ele Ment х в точке (1,1) на сетке 5х5
x R _ _ _
BM BR _ _ _
_ _ _ _ _
_ _ _ _ _
_ _ _ _ _
Теперь, как можно видеть в приведенных выше примерах, количество клеток, прилегающее к нашему текущему элементу х может изменяться в зависимости от X, Y -координаты самого элемента x.
Я хотел решить это, сказав, что каждый X слева и справа от заданной координаты X, а также каждый Y выше и ниже указанной координаты Y должен находиться в области 1..N, а затем определять их фактические значения:
% Adj_cells/2 : (X,Y) coordinate, board width/height N
adjacent_cells((X,Y),N) :-
[Xleft,Xright,Yup,Ydown] #:: 1..N,
Xleft #= X-1, Xright #= X+1,
Yup #= Y-1, Ydown #= Y+1,
...
Однако, конечно, это оценивается как false при пересечении границы доски.
Я надеялся, что мне явно не нужно будет различать ситуации, связанные с границами борта; вместо этого я пытаюсь найти что-то, что вместо того, чтобы оценивать значение false, когда достигается координата вне привязки, просто «отбрасывает» этот результат и пытается вычислить другие соседние ячейки.
Я уверен, что в ECLiPSe будет небольшое небольшое решение, но я искал документы и, как далеко, не могу найти что-то, что соответствует моим потребностям.
Любая помощь очень ценится!
Точно, что я искал, это имеет смысл, спасибо! – SND