我必须写谓词谓词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不定义在这一点上,只是猜测)。我试图解释我的思维方式......但可能有一个更简单的方法,你认为如何?