Как изменить значения платы с A на B

#prolog

#пролог

Вопрос:

Это моя первая программа в Prolog, и я столкнулся с проблемой, меня попросили изменить значения платы с A на B, как показано ниже :

Размер платы: 6 столбцов x 6 строк

Начальное значение ячеек: A

Окончательные значения ячеек: B

Условие :

Когда A переворачивается, он становится B, а его соседи переворачиваются на Z. Если ее соседями являются A, они становятся B, и наоборот, если они являются B, они становятся A .

Под соседями они подразумевают поля в одной строке и столбце. это означает, что если мы изменим значение ячейки, значения 4 других ячеек также изменятся.

Я искал повсюду, просматривал видео и читал доступные примеры, чтобы понять, как мне поступить. Я не прошу сам код, я хотел бы понять, может ли кто-нибудь объяснить мне, как начать / подумать.

Я пробовал это :

     :- dynamic ligne/2. 

matrix([ 
[1,2,3,4,5,6], 
[7,8,9,10,11,12], 
[13,14,15,16,17,18], 
[19,20,21,22,23,24], 
[25,26,27,28,29,30], 
[31,32,33,34,35,36] 
]). 
ligne(X, Ligne) :- 
        matrix(M), 
        nth0(X, M, Ligne), 
        assert(ligne(X, Ligne)). 
colonne(X, Colonne) :- 
        matrix(M), 
        maplist(nth0(X), M, Colonne). 

voi_vert(X, Y, Z) :- 
       ligne(X, Ligne), 
      Y is X 1, 
       nth0(Y, Ligne, Z), !.
  

Комментарии:

1. Вам нужно привести пример, когда ваше решение работает не так, как ожидалось.

2. Поскольку ячейки на самом деле имеют определенное значение, вам следует установить для вашей матрицы значение all 'A' (или all a все). Если вы хотите изменить состояние, вам нужна входная матрица и выходная матрица. Но у меня остается вопрос: что должен делать ваш предикат? Если вы уже знаете, что конечное состояние равно all 'B' (или all b все), вы должны отслеживать или перечислять все промежуточные состояния? Кроме того, когда матрица меняет состояние, это только по одной ячейке за раз, начиная с строки 1, столбца 1? Как должно применяться правило? И что, Z когда вы говорите, … его соседи перевернуты .,,,?

3. Да, состояние ячеек будет меняться одна за другой, пока не станет полностью B. вот почему я борюсь с условием, которое они дали. Было бы проще, если бы я мог поделиться имеющимся у меня PDF-файлом

4. Вот код, с которого я начал::- dynamic ligne / 2. matrix([ [1,2,3,4,5,6], [7,8,9,10,11,12], [13,14,15,16,17,18], [19,20,21,22,23,24], [25,26,27,28,29,30], [31,32,33,34,35,36] ]). длина (X, длина):- матрица(M), nth0(X, M, длина), assert(длина(X, длина)). колонна (X, Colonne):- матрица (M), список отображений (nth0(X), M, колонна). voi_vert(X, Y, Z):- длина (X, длина), Y равно X 1, nth0(Y, длина, Z), !.

5. Отредактируйте свой вопрос и поместите туда код, который у вас есть. Слишком сложно читать комментарии, поскольку они неформатированы, и другие пропустят это. Я все еще не уверен, что вы хотите, чтобы предикат выполнял (например, какие решения он должен находить). Было бы полезно, если бы вы могли привести пример запроса.