在 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]].
我正在尝试使用 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]].