Doshka([],[1,2,3,4],[1,2,3,4],[1,2,3,4,5,6,7],[
1,2,3,4,5,6,7]),
а шахматну доску з однією королевою в самому лівому
верхньому кутку опише предикат:
doshka([k(1,1)],[2,3,4],[2,3,4],[1,2,3,4,5,6,7]
,[2,3,4,5,6,7])
Накінець, ми можемо вирішити поставлену задачу,
описуючи відношення між пустою доскою і доскою з N
королевами. Визначимо предикат
mistseN(integer,doshka,doshka) з двома фразами.
Королеви розташовуються одна за одною, поки кожний рядок і
кожна колонка не будуть зайняті. Тому в першій фразі два
списки freerows і freecols - пусті:
Mistse N(_,doshka(D,[],[],X,Y),
doshka(D,[],[],X,Y)):- !.
Mistse N(_,Doshka1, Rеsult):-
mistse_dlia_korolevy(N, Doshka1, Doshka2),
mistse_N(N, Doshka2, Result).
В другій фразі предикат mistse_dlia_korolevy описує
зв'язок між Doshka1 і Doshka2. В Doshka2 на одну
королеву більше, ніж в Doshka1. Для опису предикату можемо
використати наступну декларацію:
mistse_dlia_korolevy(integer, doshka, doshka)
Тому суть задачі з N королевами заключається в тому, щоб
описати , як можна розмістити максимальну кількість королев на
досці, починаючи з пустої доски. Реалізовувать таке
поповнення королев будемо через поповнення списку новою
королевою : [k(R,S) | Koroleva].
Для розміщення наступної королеви нам потрібно серед
вільних рядів Rjad знайти ряд R, в якому ми зможемо
128