Jest Matrix transpozycji funkcję:Pomóż mi wyjaśnić F # Matrix funkcję
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"
to działa dobrze.
Co znaczy (_ :: _) :: _?
Nie rozumiem całego kodu!
Kto może to wyjaśnić?
Dziękujemy!
znajdę odpowiedź:
(_ :: _) :: _ jest wzorzec dopasowania na wartości typu wykaz wykazów wskazówki
Jeśli piszę:
let rec transpose (M:int list list) =
match M with
| hd::tl -> List.map List.head M :: transpose (List.map List.tail M)
| _ -> []
Rzuca wyjątek środowiska wykonawczego. Czy coś jest nie tak z hd?
Tak, to zrobić coś podobnego [[] [] []] gdy wezwanie List.tail, to zgłasza wyjątek, gdy wezwanie List.head!
Problem rozwiązany!
Dziękuję wszystkim!
+1, dobra odpowiedź! – gradbot