Ответ в теме: Отражение матрицы на Prolog

      Комментарии к записи Ответ в теме: Отражение матрицы на Prolog отключены
#2042

Матрица представлена списком строк, поэтому чтобы выполнить вертикальное отражение – достаточно выполнить реверс соответствующего списка:

vertical_mirror(Matrix, Mirror):-
  reverse(Matrix, Mirror).

Для реверса списка используется встроенная функция reverse.

Для горизонтального отражения матрицы достаточно перевернуть каждую ее строку:

horizontal_mirror([], []):-!.
horizontal_mirror([Row|Tail], [ReverseRow|ReverseTail]):-
  reverse(Row, ReverseRow), 
  horizontal_mirror(Tail, ReverseTail).

Если матрица пустая – то результатом является также матрица, не содержащая ни одной строки.
В противном случае от матрицы отделяется первая строка, выполняется ее реверс, а остальная часть матрицы обрабатывается рекурсивно.