How to transpose a matrix in prolog

后端 未结 8 1914
悲&欢浪女
悲&欢浪女 2020-12-06 18:40

How can I transpose a list like [[1,2,3][4,5,6][6,7,8]] to [[1,4,6],[2,7,8],[3,6,9]]?

To depict it: I\'d like to flip the matrix 90 degree

8条回答
  •  孤城傲影
    2020-12-06 19:15

    Here's a fragment of a larger answer:

    % transposed(+A, ?B) iff matrix B is transposed matrix A
    transposed(A, B) :- transposed(A, [], B).
    transposed(M, X, X) :- empty(M), !.
    transposed(M, A, X) :- columns(M, Hs, Ts), transposed(Ts, [Hs|A], X).
    
    % empty(+A) iff A is empty list or a list of empty lists
    empty([[]|A]) :- empty(A).
    empty([]).
    
    % columns(+M, ?Hs, ?Ts) iff Hs is the first column
    %   of matrix M and Ts is the rest of matrix M
    columns([[Rh|Rt]|Rs], [Rh|Hs], [Rt|Ts]) :- columns(Rs, Hs, Ts).
    columns([[]], [], []).
    columns([], [], []).
    

提交回复
热议问题