【问题标题】:transpose a matrix in prolog在序言中转置矩阵
【发布时间】:2014-05-22 15:12:53
【问题描述】:

我对 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,但是我想尝试自己编写。

【问题讨论】:

    标签: matrix prolog transpose


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-11
      • 2014-09-08
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多