使用分解对Prolog转置矩阵

时间:2015-12-08 20:36:53

标签: matrix prolog logic

首先,我知道还有其他代码可以在其他问题中对矩阵进行转置,但我的问题是具体的:

在作业中,我被要求建立一个decompose/3代码,用于将每个列表的第一个元素与其余元素分开。

在此之后,我被要求为transpose/3矩阵创建代码。 (如果输入不是矩阵,它可能会失败,目的不是检查它是否是矩阵)。

到目前为止,我有以下代码decompose/3transpose/3transpose1/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

知道如何操作我的代码吗?如何使基本案例适用于我的矩阵上的任意行数?为什么这不起作用?

谢谢!

0 个答案:

没有答案