Я знаю, что это старый вопрос, но недавно мне пришлось решить его как часть упражнения, которое я делал, и я наткнулся на решение @ sepp2k, но я не мог понять, как оно работает, поэтому я попытался прийтина это сам.
По сути, это тот же алгоритм, но немного более краткий, поскольку он не разрушает список списков.Я подумал, что опубликую это здесь, если кто-то другой ищет, и может найти способ выразить это полезным:
let rec transpose = function
| []
| [] :: _ -> []
| rows ->
List.map List.hd rows :: transpose (List.map List.tl rows)