在 Prolog 中反转矩阵行

Reversing matrix rows in Prolog

我正在尝试使用 Prolog 编写一个反转矩阵中所有行的谓词。

例如矩阵 [ [1,2,3], [4,5,6], [7,8,9] ] 应该变成 [ [3,2,1], [6,5, 4], [9,8,7] ].

我目前的尝试是:

reverseRows([[H|T]|_],X):-reverse([H|T],X).

仅反转第一行。如何更改以上内容以适用于所有行?欢迎任何帮助。

最简单的解决方案是使用谓词 maplist/3

?- maplist(reverse, [[1,2,3], [4,5,6], [7,8,9]], Reversed).
Reversed = [[3, 2, 1], [6, 5, 4], [9, 8, 7]].

其他可能的解决方案是:

reverse_rows([], []).
reverse_rows([Xs|Xss], [Ys|Yss]) :-
    reverse(Xs, Ys),
    reverse_rows(Xss, Yss).

示例:

?- reverse_rows([[1,2,3], [4,5,6], [7,8,9]], Reversed).
Reversed = [[3, 2, 1], [6, 5, 4], [9, 8, 7]].