Реализуемое решение, основанное на вашем примере, опубликованном Робертом, работает отлично. Однако, если вы хотите следовать функциональному стилю, вы можете написать то же самое, используя рекурсию и сопоставление с образцом:
let rec firstColumn lst =
match lst with
| (head::_) :: lst -> head :: (firstColumn lst)
| _ -> []
Шаблон (head::_) :: lst
берет список списков, извлекает заголовок первогоlist и дает вам остальные списки как lst
, так что вы можете затем рекурсивно обработать lst
и добавить head
вперед, как первый столбец.