Prolog - 将数字乘以矩阵

时间:2014-02-19 16:19:54

标签: matrix prolog

我是初学者。我有一个问题:输入矩阵并将该矩阵乘以4。 这是我的代码:

make_num_matrix(N,Matrix) :- make_matrix(N,N,Matrix).

make_matrix(_, N, []) :- N =< 0, !.
make_matrix(M, N, [R|Rs]) :-
    make_list(M,R),
    N2 is N - 1,
    make_matrix(M, N2, Rs).

make_list(N, [ ]) :- N =< 0, !.
make_list(N, [N | Rest]) :-
    N > 0,
    N2 is N - 1,
    make_list(N2, Rest).

在Prolog:

1 ?- make_num_matrix(4,M).

结果:

M = [[4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1]].

但我不知道如何将此矩阵(M)乘以4。 请帮我。谢谢!

1 个答案:

答案 0 :(得分:0)

因为您将矩阵表示为列表列表,maplist / 3这是更简单的方法

multiply_matrix(I, N, O) :- maplist(multiply_list(N), I, O).
multiply_list(N, I, O) :- maplist(multiply(N), I, O).
multiply(N, I, O) :- O is I * N.

?- make_num_matrix(4,M),multiply_matrix(M,4,R).
M = [[4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1]],
R = [[16, 12, 8, 4], [16, 12, 8, 4], [16, 12, 8, 4], [16, 12, 8, 4]].