0

如何在 Prolog 中创建 nxn 矩阵,矩阵内部是 n 到 1 的列表。我可以创建生成列表的编码,但不知道如何创建矩阵 nxn:

make_num_list(N, List) :-
   make_list(N, List).

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

2 回答 2

1

重用你的代码和你的想法。

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).

?- make_num_matrix(4, M).
M = [[4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1]].
于 2013-11-05T06:49:59.587 回答
1

大多数 Prolog 都/3 之间,而且肯定会有findall /3

make_matrix(N, M) :- findall(Ns, (between(1,N,_), make_list(N,Ns)), M).
于 2013-11-05T07:06:35.033 回答