Я пытаюсь немного узнать о swi-prolog (помимо основных, бесполезных программ).Пролог: Изучение на примере
Может ли кто-нибудь объяснить (возможно, в псевдокоде), что делает этот решатель sudoku и связанные с ним функции? Если вам нужна дополнительная ссылка, она находится в пакете swip-пролога CLP (FD).
Спасибо!
:- 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]]).
Обучение прологам - это изучение любого другого языка. получите хорошее представление о примитивах, и вы можете анализировать и понимать любую программу с практикой. основные бесполезные программы - ваш друг. – echo