%Carré magique
%
%X11 X12 X13
%X21 X22 X23
%X31 X32 X33

carremagique(L) :-
	L=[X11,X12,X13,X21,X22,X23,X31,X32,X33],
	numlist(1,9,L2),
	permutation(L2,L),
	Ligne1 is X11+X12+X13,
	Ligne2 is X21+X22+X23,
	Ligne1 =:= Ligne2,
	Ligne3 is X31+X32+X33,
	Ligne1 =:= Ligne3,

	Col1 is X11+X21+X31,
	Ligne1 =:= Col1,
	Col2 is X12+X22+X32,
	Ligne1 =:= Col2,
	Col3 is X13+X23+X33,
	Ligne1 =:= Col3,

	Diag1 is X11+X22+X33,
	Ligne1 =:= Diag1,
	Diag2 is X13+X22+X31,
	Ligne1 =:=Diag2.

print_carre([]).

print_carre([X1,X2,X3|L]) :-
	write(X1),
	write(X2),
	write(X3),
	write('\n'),
	print_carre(L).

%somme(L,N) est vrai si N est la somme des entiers contenus dans L

%produit(L,N) est vrai si N est le produit des entiers contenus dans L
%

somme([],0).

somme([X1|L],R) :-
	somme(L,R1),
       R is X1+R1.

produit([],1).

produit([X1|L],R) :-
	produit(L,R1),
        R is X1*R1.

concat([],L2,L2).

concat([X|L1],L2,[X|L3]) :-
	concat(L1,L2,L3).
	%L3 is [X1|L3]. %fait par [X|L3] dans l'init

split(L2,[],L2).

split([X|L1],[X|L2],L3) :-
	split(L1,L2,L3).

:- begin_tests(mestests).
%use_module(library(lists))
test(somme) :-
	somme([1,2,3],6),
	somme([1,2,3,4],10).

test(produit) :-
	produit([1,2,3],6),
	produit([1,2,3,4],24).

:- end_tests(mestests).







