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
| # main(_) -> X=make_matrix({1,2,3,4},2), Y=make_matrix({2,3,4,5},2), Z=mul_matrix(X,Y,2), print_matrix(X,2),io:format("* ~n"), print_matrix(Y,2),io:format("= ~n"), print_matrix(Z,2).
%% generate a matrix
make_matrix(Data,Size) when erlang:is_list(Data) -> make_matrix(list_to_tuple(Data),Size); make_matrix(Data,Size) -> fun(I,J) when I =< Size , J =< Size -> element(I*Size+J-Size,Data) end.
%% X , Y: matrix -> matrix
mul_matrix(X,Y,Size) -> make_matrix([ lists:sum([ X(X1,T)*Y(T,Y1)|| T <- lists:seq(1,Size) ]) || X1 <- lists:seq(1,Size), Y1 <- lists:seq(1,Size) ],Size).
print_matrix([],Size) -> ok; print_matrix(Matrix,Size) when is_function(Matrix) -> print_matrix([Matrix(X1,Y1) || X1 <- lists:seq(1,Size), Y1 <- lists:seq(1,Size) ],Size); print_matrix(Matrix,Size) -> {L,R}=lists:split(Size,Matrix), io:format("~w ~n",[L]), print_matrix(R,Size).
sum(Start,End) -> sum(Start+1,End,Start). sum(End,End,Sum) -> Sum+End; sum(Start,End,Sum) -> sum(Start+1,End,Sum+Start).
|
去评论