]> AND Private Git Repository - 14Secrypt.git/blob - experiments/mtrx.pl
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
ajout de cr
[14Secrypt.git] / experiments / mtrx.pl
1 :-use_module(library(clpfd)).
2
3
4 % N is the dot product of lists V1 and V2.
5 dot(V1, V2, N) :- maplist(product,V1,V2,P), sumlist(P,N).
6 product(N1,N2,N3) :- N3 is N1*N2.
7
8 % Matrix multiplication with matrices represented
9 % as lists of lists. M3 is the product of M1 and M2
10 mmult(M1, M2, M3) :- transpose(M2,MT), maplist(mm_helper(MT), M1, M3).
11 mm_helper(M2, I1, M3) :- maplist(dot(I1), M2, M3).
12
13
14
15
16 suml([],[],[]).
17
18 suml(L1,L2,[N|R2]):-
19     L1 = [E1|T1],
20     L2 = [E2|T2],
21     N is E1 + E2,
22     suml(T1,T2,R2).
23
24
25
26 summ([],[],[]).
27 summ(M1,M2,[Lr|R2]):-
28     M1 = [E1|T1],
29     M2 = [E2|T2],
30     suml(E1,E2,Lr),
31     summ(T1,T2,R2).
32
33
34
35 flatten(List, Flattened):-
36   flatten(List, [], Flattened).
37
38 flatten([], Flattened, Flattened).
39 flatten([Item|Tail], L, Flattened):-
40   flatten(Item, L1, Flattened),
41   flatten(Tail, L, L1).
42 flatten(Item, Flattened, [Item|Flattened]):-
43   \+ is_list(Item).
44
45 touspositifs(X):-
46     flatten(X,XF),
47     tp(XF).
48
49 tp([]).
50 tp(X):-
51     X = [E|L],
52     E #>= 0,
53     tp(L).
54