Matrix 在prolog中转置矩阵

Matrix 在prolog中转置矩阵,matrix,prolog,transpose,Matrix,Prolog,Transpose,我对序言相当陌生,我在课堂上的第一个作业之一是在序言中转置矩阵,意思是:如果我有一个矩阵 A=[[1,2,3],[4,5,6],[7,8,9]] 我应该换一个矩阵 S=[[1,4,7],[2,5,8],[3,6,9]]. 我已经为此编写了代码,但结果是: S=[[1,4,7],[2,5,8],[3,6,9], []]. (末尾有一个空列表)。 我如何纠正这样的事情?我的代码完全错了吗?我不应该使用任何非标准工具(如SWI Prolog) 我也看到并使用了这里提供的代码:,但是我想自己尝试编

我对序言相当陌生,我在课堂上的第一个作业之一是在序言中转置矩阵,意思是:如果我有一个矩阵

A=[[1,2,3],[4,5,6],[7,8,9]]
我应该换一个矩阵

S=[[1,4,7],[2,5,8],[3,6,9]].
我已经为此编写了代码,但结果是:

S=[[1,4,7],[2,5,8],[3,6,9], []].
(末尾有一个空列表)。 我如何纠正这样的事情?我的代码完全错了吗?我不应该使用任何非标准工具(如SWI Prolog)


我也看到并使用了这里提供的代码:,但是我想自己尝试编写。

一个简单的解决方案是为predicate
trans/2添加另一个规则,以匹配在您的情况下在末尾添加空列表的特定情况

trans([],[]).
trans([[]|_], []):-!.
trans([S|R], [L|L1]) :-
    trans(S, R, L, M),
    trans(M, L1).
trans([],[]).
trans([[]|_], []):-!.
trans([S|R], [L|L1]) :-
    trans(S, R, L, M),
    trans(M, L1).