Соответствующее представление структуры данных, подходящей для вашей ситуации, часто составляет половину проблемы в PROLOG.
Существует много способов представления вещей в сетке, таких как 2-мерный массив в PROLOG, но я бы сказал, что самые простые из них, вероятно, основаны на списках, поскольку существует много встроенной поддержки структур списков.:
1.Список списков. Например, для 3x3, [[a,b,c],[d,e,f],[g,h,i]]
.Ваша интерпретация этой структуры будет присуща вашему коду для прохождения и манипулирования ею (т. Е. [a,b,c]
может быть строкой или столбцом, вам решать, просто быть последовательным).Чтобы получить доступ к отдельной ячейке, вам нужно пройти через структуру с помощью предиката, который подсчитывает (или соответствует) определенную позицию.
2.Список терминов. Например, [cell(0,0,a), cell(0,1,b), ..., cell(2,2,i)]
.Это позволит вам извлекать отдельные ячейки напрямую, например, через select(cell(1,2,Value), L, Rem)
, чтобы извлечь Value
ячейки в позиции 1,2
из списка ячеек L
, что позволит вам манипулировать ею и создать полный списокснова, создав новый термин cell/3
и добавив его к Rem
.
, я бы не советовал использовать механизм assert
/ retract
при написании кода для решения этой проблемы;это грязно, ненужно и не способствует написанию легко понятного и «отлаживаемого» кода PROLOG.