我正在尝试编写一个谓词,它使用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).它只反转第一行。如何将上述内容更改为适用于所有行?欢迎任何援助。
发布于 2021-11-28 18:12:28
最简单的解决方案是使用谓词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]].https://stackoverflow.com/questions/70145982
复制相似问题