Prolog 数独错误,returns false 无论如何
Prolog sudoku error, returns false no matter what
我对此有疑问:
:-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 prolog 网站上的注释相同),当我 运行 它时,我只得到 "false"。有人可以帮帮我吗?谢谢!
所以,正如我所预料的那样,问题真的很愚蠢。在谓词数独中,我使用字母 C 和 E 来表示 2 个完全不同的事物(它们不是同一事物,我只是用相同的字母命名了 2 个独立的变量)。更改程序后完美运行!
我对此有疑问:
:-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 prolog 网站上的注释相同),当我 运行 它时,我只得到 "false"。有人可以帮帮我吗?谢谢!
所以,正如我所预料的那样,问题真的很愚蠢。在谓词数独中,我使用字母 C 和 E 来表示 2 个完全不同的事物(它们不是同一事物,我只是用相同的字母命名了 2 个独立的变量)。更改程序后完美运行!