swi-prologで魔方陣を計算する
もらいもの。
prologってこういうのは美しくかけるんだな。
magic_square(L):-magic_square([1,2,3,4,5,6,7,8,9],L). magic_square(Elements,[A,B,C,D,E,F,G,H,I]):- permutation(Elements,[A,B,C,D,E,F,G,H,I]), sumlist([A,B,C],15), sumlist([D,E,F],15), sumlist([G,H,I],15), sumlist([A,D,G],15), sumlist([B,E,H],15), sumlist([C,F,I],15). % ?- magic_square(X). % ?- time(magic_square(X)). /* 時間計測するとき */ % ?- magic_square(X),print(X),nl,fail. /* 全部出力するときはこちら */ $ ?- time((magic_square(X),print(X),nl,fail)). /* 時間計測 */ % X = [6, 7, 2, 8, 3, 4, 1, 5, 9] ;