транспонирование списка списков

Я пытаюсь создать рекурсивную функцию для транспонирования списка списков, 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)

Но я не могу ее обобщать. Я определенно думаю не в том направлении. Можно ли это обобщить? Есть ли лучшее решение? Пожалуйста, помогите.

7
задан lalli 21 October 2010 в 16:35
поделиться