There is a Matrix transpose function:
let rec transpose = function | (_::_)::_ as M -> List.map List.head M :: transpose (List.map Li
(_::_)::_ is pattern matching. _ is simply an unused variable. This would be equivalent:
(_::_)::_
_
(a::b)::c as M -> List.map List.head M :: transpose (List.map List.tail M)