existe una matriz transponer función:Ayúdame a explicar la función F # Matrix
let rec transpose = function
| (_::_)::_ as M -> List.map List.head M :: transpose (List.map List.tail M)
| _ -> []
[[1; 2; 3]; [4; 5; 6]; [7; 8; 9]] |> transpose |> printfn "%A"
Trabaja muy bien.
¿Qué significa (_ :: _) :: _?
¡No entiendo todo el código!
¿Quién puede explicarlo?
¡Gracias!
puedo encontrar la respuesta:
(_ :: _) _ :: es un patrón de coincidencia sobre el valor del tipo lista de listas de enteros
Si Yo escribo:
let rec transpose (M:int list list) =
match M with
| hd::tl -> List.map List.head M :: transpose (List.map List.tail M)
| _ -> []
Lanza una excepción de tiempo de ejecución. ¿Hay algún problema con hd?
Sí, que hacen algo así como [[] [] []] cuando la llamada List.tail, entonces se lanza una excepción cuando la llamada List.head!
¡Problema resuelto!
¡Gracias a todos!
+1, buena respuesta! – gradbot