我对Prologue相当新,我在课堂上的第一个任务是在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)
trans([],[]).
trans([S|R], [L|L1]) :-
trans(S, R, L, M),
trans(M, L1).
trans([], _,[],[]).
trans([S1|S2], [], [S1|L1], [S2|M]):-
trans([], [], L1, M).
trans([S1|S2], [R1|R2], [S1|L1], [S2|M]):-
trans(R1, R2, L1, M).
我也看过并使用过此处提供的代码:How to transpose a matrix in prolog,但我想尝试自己编写。
答案 0 :(得分:1)
一个简单的解决方案是为谓词trans/2
添加另一个规则,以匹配在您的情况下最后添加空列表的特定情况。
trans([],[]).
trans([[]|_], []):-!.
trans([S|R], [L|L1]) :-
trans(S, R, L, M),
trans(M, L1).