このディレクトリの索引

#  I want to find all possible combinations of 3x3 matrix. But there is a rule that the digits occur just once and the sum on each line and column is the same.
#  
#  私は3x3行列のすべての可能な組み合わせを見つけたい。しかし、数字は一度だけ発生し、各行の和と列が同じであるという規則があります。
#  
#  8 1 6 
#  3 5 7 
#  4 9 2
#  

'私は3x3行列のすべての可能な組み合わせを見つけたい。しかし、数字は一度だけ発生し、各行の和と列が同じであるという規則があります。'([[A,B,C],[D,E,F],[G,H,I]]) :-
        順列([1,2,3,4,5,6,7,8,9],9,[A,B,C,D,E,F,G,H,I]),
        各行の和と列が同じである(A,B,C,D,E,F,G,H,I).

各行の和と列が同じである(A,B,C,D,E,F,G,H,I) :-
        各行の和(A,B,C,D,E,F,G,H,I,_各行の和でありしかも各列の和),
        各列の和(A,B,C,D,E,F,G,H,I,_各行の和でありしかも各列の和).

各行の和(A,B,C,D,E,F,G,H,I,_各行の和でありしかも各列の和) :-
        _各行の和でありしかも各列の和 is A+B+C,
        _各行の和でありしかも各列の和 is D+E+F,
        _各行の和でありしかも各列の和 is G+H+I.

各列の和(A,B,C,D,E,F,G,H,I,_各行の和でありしかも各列の和) :-
        _各行の和でありしかも各列の和 is A+D+G,
        _各行の和でありしかも各列の和 is B+E+H,
        _各行の和でありしかも各列の和 is C+F+I.

順列(Y,0,[]).
順列(Y,N,[A|X]) :-
        del(A,Y,Z),
        M is N - 1,
        順列(Z,M,X).

del(A,[A|X],X).
del(A,[B|X],[B|Y]) :-
        del(A,X,Y).