Witam, magiczny kwadrat jest to macierz w której suma wszystkich elementów w wierszu, w kolumnie i po przekątnej równa się tej samej liczbie. Szukając kwadratu 3 na 3 w którym sumy mają wynosić 15 zrobiłem, wykorzystując bibliotekę clpfd coś takiego:

 :- use_module(library(clpfd)).
macierz:-
Var = [X1,X2,X3,X4,X5,X6,X7,X8,X9],
Var ins 1..9,
all_different(Var),
X1 + X2 + X3 #= 15, 
X4 + X5 + X6 #= 15,
X7 + X8 + X9 #= 15,
X1 + X4 + X7 #= 15,
X2 + X5 + X8 #= 15,
X3 + X6 + X9 #= 15,
X1 + X5 + X9 #= 15,
X3 + X5 + X7 #= 15,
label([X1, X2, X3]),
write(X1),write(X2),write(X3),nl,
write(X4),write(X5),write(X6),nl,
write(X7),write(X8),write(X9),nl.

I to działa. Jednak teraz muszę zrobić coś takiego tylko, że dla kwadratu o dowolnych rozmiarach, np wywołując maciez(n). gdzie n jest rozmiarem kwadratu. I tu pojawia się problem bo nie mam zielonego pojęcia jak się do tego zabrać. Czy ktoś zaprawiony w bojach z prologiem mógłby mi wytłumaczyć w jaki sposób to zrobić? Z góry dzięki za wszelkie podpowiedzi i wskazówki.