1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| multiply(M1, M2, R) :-
% Mise en colonne des valeurs de la matrice 2
% e.g. : de la liste
% [[3, 1], [2, 1], [1,0]]
%
% on extrait les deux listes
%
% [[3, 2, 1], [1, 1, 0]]
extract_colum(M2, LC),
% multiplication effective
multiply1(M1, LC, R).
extract_colum(M, LC) :-
M= [H | _],
length(H, L),
extract(M, 0, L, [], LC).
extract(_, N, N, L1, L) :-
!,
reverse(L1, L).
extract(M, N, Max, L, LF) :-
% on extrait l'élément de rang N de la liste M
maplist(nth0(N), M, L1),
N1 is N+1,
extract(M, N1, Max, [L1 | L], LF).
multiply1(M1, M2, R) :-
maplist(multiply2(M2), M1, R).
multiply2(M1, C, R) :-
maplist(multiply3(C), M1, R).
multiply3(Co, Ro, R) :-
maplist(mult, Co, Ro, LR),
sumlist(LR, R).
mult(A, B, R) :-
R is A * B. |
Partager