我必須寫謂詞謂詞product/3
接收兩個矩陣,並返回它們的矩陣乘法,如果可能或否則失敗。 (這意味着如果矩陣fullfill要求[n x p] [p x y]
,然後返回其尺寸[n x y]
倍增)矩陣乘法與Prolog
實施例:
product(M1, M2, R)
?- product([[1,2],[3,4],[5,6]], [[1,1,1],[1,1,1]], M).
M = [[3, 3, 3], [7, 7, 7], [11, 11, 11]];
No
爲此,我有兩個代碼的索引上的矩陣rowI
和索引第n行第n列columnI
(我解釋他們如何在下面的代碼中工作)。
%Predicate: rowI(M, I, RI)
%Input rowI([[1,2],[3,4],[5,6]], 2, RI).
% RI = [3,4];
rowI([H|_],1,H):-!.
rowI([_|T],I,X) :-
I1 is I-1,
rowI(T,I1,X).
% columnJ(M, J, CJ)
%Input columnJ([[1,2],[3,4],[5,6]], 1, CJ).
% CJ = [1,3,5];
columnJ([],_,[]).
columnJ([H|T], I, [R|X]):-
rowI(H, I, R),
columnJ(T,I,X).
product([H|T], M2, [R|X]):-
columnJ(M2, C, Z),
mult(H, Z , X),
product(T, M2 , X).
我被抓住了M1
(這將是每行)的頭不知怎麼想,然後在M2
將乘法運算這份名單將是新行後乘以每個列。所以(C必須是一個從1開始到M2
長度的計數器,然後mult
我只是想把它與列表相乘(mult不定義在這一點上,只是猜測)。我試圖解釋我的思維方式......但可能有一個更簡單的方法,你認爲如何?