Итак, мой учитель дает мне предположение, что мне кажется, что он не из этого мира или, по крайней мере, из моего класса, и, может быть, это потому, что мы едва практиковались с прологом, я должен написать прологическую программу, которая решаетBlob игры со страницы "Mindgames", я думаю, что я мог бы сделать это на Python или C ++, потому что я знаком с этими кодами, но я совсем не знаком с прологом, я много борюсь. Вот что, я думаю, я должен сделать:
- Имеет функцию, которая сообщает мне, что было нарисовано, а что нет.
- Рекурсивно искать все возможные пути известных соседей, которые я долженпокрасить.
- Сделать ограничение ходов. Сохраните выбранный цвет (или ход) в списке, который я должен напечатать в качестве ответа.
В последнее время я поискал в Интернете, как составить список, как использовать матрицу ина самом деле пытается понять, как это работает. Но пролог документирован не так, как мне легко понять. Мой учитель сказал, что я должен отделить проблему следующим образом:
- Расширьте поиск и отметьте всех, у кого будет тот же цвет в начале.
- Нарисуйте соседей, которые вы можете.
- Сохранить это в списке для печати
- Сделать это рекурсивно
Из Интернета я нашел способ найти соседей и как индексировать список в матрице,но это все, я не думаю, что понимаю, как пролог работает для этого.
Что у меня есть, и я не знаю, сработает ли это для моей проблемы
:- use_module(library(clpfd)).
% at, permite indexar la matriz
at(Mat, [Row, Col], Val) :-
nth1(Row, Mat, ARow),
nth1(Col, ARow, Val).
% indices, generador de indices de la matriz
add(X,L,Ls) :-
Ls = [X|[L]].
indices1(L,X,Ls) :-
maplist(add(X),L,Ls).
indices2(L1,L2,Li) :-
maplist(indices1(L2),L1,Ls),
append(Ls,Li).
indices(M,N,Is) :-
numlist(1,M,LMs),
numlist(1,N,LNs),
indices2(LMs,LNs,Is).
% vecino, posiciones vecinas de [X,Y]
% vecino([X,Y],[X,Y1]) :- Y1 #= Y+1.
% vecino([X,Y],[X,Y1]) :- Y1 #= Y-1.
% vecino([X,Y],[X1,Y]) :- X1 #= X+1.
% vecino([X,Y],[X1,Y]) :- X1 #= X-1.
vecino([X,Y],[X1,Y1]) :- abs(X-X1)+abs(Y-Y1) #= 1. % compact
Заранее спасибо.