Переставляя матрицы в Ocaml - PullRequest
       22

Переставляя матрицы в Ocaml

0 голосов
/ 12 апреля 2020

Итак, я должен выполнить эту задачу

перестановка: 'список списка -> список int -> int список ->' список списка =

, который занимает квадрат n × Матрица n представлена ​​в виде списка списков в качестве первого параметра и возвращает матрицу со строками в порядке, заданном списком целых чисел в качестве второго параметра, и столбцами в порядке, заданном списком целых чисел в качестве третьего параметра. Каждый второй и третий параметр представляют перестановку первых n чисел.

Пример: перестановка [[1; 2; 3]; [4; 5; 6]; [7; 8; 9]] [ 2; 3; 1] [1; 3; 2] ;; -: int = [[4; 6; 5]; [7; 9; 8]; [1; 3; 2]]

Пока мой код такой:

let fun a i =
let elem id = List.nth a (id-1) in
List.map elem i 

Это работает как список, но мне нужно, чтобы он работал как список списков. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 апреля 2020

(Вы не можете иметь функцию с именем fun в OCaml. fun - это так называемое зарезервированное слово. Я переименую его в perm.)

Ваша функция имеет этот тип :

val perm : 'a list -> int list -> 'a list = <fun>

Другими словами, он работает для любого списка вообще. Это включает в себя список списков.

Например:

# perm [1;2;3;4] [4;3;2;1];;
- : int list = [4; 3; 2; 1]
# perm [[1;1]; [2;2]; [3;3]; [4;4]] [4;3;2;1];;
- : int list list = [[4; 4]; [3; 3]; [2; 2]; [1; 1]]

Итак, совет состоит в том, чтобы сопоставить эту функцию perm с начальным списком, а затем снова применить эту функцию perm к результат.

...