Я пытаюсь создать рекурсивную функцию для транспонирования списка списков, nxp
в pxn
. Но я не могу этого сделать. Мне удалось создать функцию для транспонирования списка списков 3 xn
в список nx 3
:
let rec drop1 list=
[(match (List.nth list 0) with [] -> [] | a::b -> b);
(match (List.nth list 1) with [] -> [] | a::b -> b);
(match (List.nth list 2) with [] -> [] | a::b -> b);]
let rec transpose list=
if List.length (List.nth list 0) == 0 then []
else [(match (List.nth list 0) with [] -> 0 | a::b -> a);
(match (List.nth list 1) with [] -> 0 | a::b -> a);
(match (List.nth list 2) with [] -> 0 | a::b -> a)]
:: transpose (drop1 list)
Но я не могу ее обобщать. Я определенно думаю не в том направлении. Можно ли это обобщить? Есть ли лучшее решение? Пожалуйста, помогите.