List 序言:n×n矩阵的n的列表

List 序言:n×n矩阵的n的列表,list,matrix,prolog,List,Matrix,Prolog,如何在Prolog和矩阵内部创建nxn矩阵是n对1的列表。 我可以为生成列表创建编码,但不知道如何创建矩阵n x n: 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). make_num_list(N,list

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

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).
make_num_list(N,list):-
制作列表(N,列表)。
制造清单(N,[]):-
N=<0,
!.
制作列表(N[N|Rest]):-
N>0,
N2是N-1,
制造清单(N2,其余)。

重用您的代码和想法

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

大多数序言都有/3,而且肯定会有/3


@马特:我想你是说制作矩阵/2。但在那之后我们需要地图列表。。。我认为对一个新手来说,学习芬德尔是(更)基本的…@mat:我不明白。。。make_list/2是OP原始代码。我不得不改用make_num_list…Prolog中没有“matrix”数据类型,所以我们经常使用列表列表(这些列表对应于矩阵的行)。只要耐心和专注,就有可能实现这种表示的矩阵运算。
?- make_num_matrix(4, M).
M = [[4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1]].
make_matrix(N, M) :- findall(Ns, (between(1,N,_), make_list(N,Ns)), M).