Prolog:n x n矩阵的n列表

时间:2013-11-05 06:17:45

标签: list matrix prolog

如何在Prolog中创建n x n矩阵,矩阵内部是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).

2 个答案:

答案 0 :(得分: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]].

答案 1 :(得分:1)

大部分Prolog都有between / 3,肯定会有findall / 3

make_matrix(N, M) :- findall(Ns, (between(1,N,_), make_list(N,Ns)), M).