How to transpose a matrix in prolog

后端 未结 8 1915
悲&欢浪女
悲&欢浪女 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条回答
  •  旧时难觅i
    2020-12-06 19:08

    An iterative approach:

    trans([H|R],[H1|R1]):-trans2([H|R],[H|R],[],[H1|R1],0),!.
    trans2([A|_],_,_,[],N):-length(A,N).
    trans2(M,[],H1,[H1|R1],N):-N1 is N+1, trans2(M,M,[],R1,N1).
    trans2(M,[H|R],L,[H1|R1],N):-nth0(N,H,X),
       append(L,[X],L1),trans2(M,R,L1,[H1|R1],N).
    

提交回复
热议问题