Tôi đang cố gắng tìm hiểu một chút về swi-prolog (ngoài các chương trình cơ bản, vô dụng).Prolog: Học theo ví dụ
Bất cứ ai có thể giải thích (có lẽ trong mã giả) trình giải sudoku này và các chức năng liên quan đang làm gì? Nếu bạn cần tham chiếu nhiều hơn, nó được tìm thấy trong gói CLP (FD) của swi-prolog.
Cảm ơn!
:- use_module(library(clpfd)).
sudoku(Rows) :-
length(Rows, 9), maplist(length_(9), Rows),
append(Rows, Vs), Vs ins 1..9,
maplist(all_distinct, Rows),
transpose(Rows, Columns), maplist(all_distinct, Columns),
Rows = [A,B,C,D,E,F,G,H,I],
blocks(A, B, C), blocks(D, E, F), blocks(G, H, I).
length_(L, Ls) :- length(Ls, L).
blocks([], [], []).
blocks([A,B,C|Bs1], [D,E,F|Bs2], [G,H,I|Bs3]) :-
all_distinct([A,B,C,D,E,F,G,H,I]),
blocks(Bs1, Bs2, Bs3).
problem(1, [[_,_,_,_,_,_,_,_,_],
[_,_,_,_,_,3,_,8,5],
[_,_,1,_,2,_,_,_,_],
[_,_,_,5,_,7,_,_,_],
[_,_,4,_,_,_,1,_,_],
[_,9,_,_,_,_,_,_,_],
[5,_,_,_,_,_,_,7,3],
[_,_,2,_,1,_,_,_,_],
[_,_,_,_,4,_,_,_,9]]).
học prolog giống như học bất kỳ ngôn ngữ nào khác. có được một cảm giác tốt cho các nguyên thủy và bạn có thể mổ xẻ và hiểu bất kỳ chương trình nào với thực hành. các chương trình vô dụng cơ bản là bạn của bạn. – echo