2015-02-27 2 views
0

В F #, как бы я сделал функцию транспонирования списка, совместимую с списком списка списка int?Пересылка списка F # со списком списка списка?

let rec transpose = 
    function 
    | (_::_)::_ as M -> List.map List.head M :: transpose (List.map List.tail M) 
    | _ -> [] 

Похоже, что это работает только с int list list. Тем не менее, я дополнительно сгруппировал внутренний список, чтобы сделать int list list list.

+1

Вы пробовали вызывать функцию с списком списка целых списков? Что такое сообщение об ошибке? Я думаю, что все нормально. – Gustavo

+1

Как вы определяете транспозицию для многомерных структур? –

ответ

2

С списком списка списка int, это зависит от того, какие матрицы вы хотите перенести: внутренние или внешние или оба. В последнем случае это будет зависеть от порядка транспозиций.

let rec transpose = function 
| (_::_)::_ as M -> List.map List.head M :: transpose (List.map List.tail M) 
| _ -> [] 

// (a (b (c))) -> (a (c (b))) 
let transpose0 m = m |> List.map transpose 

// (a (b (c))) -> (b (a (c))) 
let transpose1 m = m |> transpose 

// (a (b (c))) -> (b (c (a))) 
let transpose2 m = m |> transpose |> List.map transpose 

// (a (b (c))) -> (c (a (b))) 
let transpose3 m = m |> List.map transpose |> transpose 

// (a (b (c))) -> (c (b (a))) 
let transpose4 m = m |> transpose |> List.map transpose |> transpose 
Смежные вопросы