0

我可以创建一个从 0 到 N 的列表并对其进行排列。但是我怎样才能把它变成矩阵并排列每一行matrix(2,L)

add(X,L,[X|L]).
add(X,[L|H],[L|R]):- add(X,H,R).

permut([],[]).
permut([L|H],R):- permut(H,R1),add(L,R1,R).

permutations(L,R):- findall(P,permut(L,P),R).

do_list(N, L) :- do_list1(N, [], L).

do_list1(0, L, L) :- !.
do_list1(N, R, L) :- N > 0,
               N1 is N-1, 
               do_list1(N1, [N|R], L).

matrix(N,L):-
    do_list(N,R),
    permut(R,L).
4

1 回答 1

0

不确定您的要求。这是基于内置函数的可能答案...

3 ?- [user].
|: matrix(N, Mat) :- length(Rows, N), maplist(numlist(1,N), Rows), maplist(permutation, Rows, Mat).

% user://1 compiled 0.01 sec, 2 clauses
true.

4 ?- matrix(3, M).
M = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] ;
M = [[1, 2, 3], [1, 2, 3], [1, 3, 2]] ;
M = [[1, 2, 3], [1, 2, 3], [2, 1, 3]] ;
M = [[1, 2, 3], [1, 2, 3], [2, 3, 1]] ;
...
于 2013-11-02T13:31:41.770 回答