Пролог ошибка судоку, возвращает ложь, несмотря ни на что - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть проблема с этим:

:-use_module(library(clpfd)).

sudoku(R) :- 
            length(R,9), /*red je duzine 9*/
            maplist(same_length(R),R), /*svi redovi su iste duzine*/
            append(R,E), /*elemente svih redova gurnem u jednu listu*/
            E ins 1..9, /* svi elementi te liste su veci od 1 i manji od 9*/
            maplist(all_distinct,R), /*svi elementi po redovimasu medjusobno razliciti*/
            transpose(R,C), /*rotira matricu 90 stepeni u desno i time kolone postaju redovi*/
            maplist(all_distinct, C),
            R = [A,B,C,D,E,F,G,H,I], /*svaki red dobije ime*/
            kvadratic(A,B,C), /* predkat kvadratic ce se pobrinuti da*/
            kvadratic(D,E,F), /* kvadrati 3 x 3 unutar matrice takodje*/ 
            kvadratic(G,H,I). /* sadrze medjusobno razlicite elemente*/

kvadratic([],[],[]). /* ako smo dosli do praznih lista stane */
kvadratic([E1,E2,E3|T1],[E4,E5,E6|T2],[E7,E8,E9|T3]) :- 
            all_distinct([E1,E2,E3,E4,E5,E6,E7,E8,E9]),
            kvadratic(T1,T2,T3). /* pozovemo za ostatak listi */

Как вы можете видеть, это мой код (с некоторыми комментариями, такой же, как и на веб-сайте пролога SWI), и когда я запускаю его, я получаю просто "ложный". Может кто-нибудь, пожалуйста, помогите мне? Спасибо!

1 Ответ

0 голосов
/ 04 апреля 2020

Итак, как я и ожидал, проблема действительно глупая. В предикате sudoku я использовал буквы C и E для двух совершенно разных вещей (это не одно и то же, просто я назвал две разные переменные одной и той же буквой). После изменения эта программа работает отлично!

...