首先,我知道还有其他代码可以在其他问题中对矩阵进行转置,但我的问题是具体的:
在作业中,我被要求建立一个decompose/3
代码,用于将每个列表的第一个元素与其余元素分开。
在此之后,我被要求为transpose/3
矩阵创建代码。 (如果输入不是矩阵,它可能会失败,目的不是检查它是否是矩阵)。
到目前为止,我有以下代码decompose/3
,transpose/3
和transpose1/3
:( transpose和transpose1相同,但基本情况不同)
%4. transpose(M, R)
%Input transpose([[1,2],[3,4],[5,6]], R).
decompose([], [], []).
decompose([[H|T]|T0], [H|L1], [T|L2]) :-
decompose(T0, L1, L2).
transpose(M,[L1|Z]):- #This code works for 3 rows
decompose(M,L1,L2),
transpose(L2,Z).
transpose1([[X],[Y],[Z],[B]],[[X,Y,Z,B]]). #This code works for up to 4 rows
transpose1([H|T],[L1|R]):-
decompose([H|T],L1,L2),
transpose1(L2,R).
所以在这个例子中输入矩阵是一个[3 x 2],并且两者都可以正常工作,但是如果我的矩阵有超过4行,transpose
不再起作用,并且由于基本案例transpose1([[X],[Y],[Z],[B]],[[X,Y,Z,B]]).
它最多可以操作4行,但如果矩阵较大,则结果为false
。
知道如何操作我的代码吗?如何使基本案例适用于我的矩阵上的任意行数?为什么这不起作用?
谢谢!