有一个矩阵转置功能:帮我解释一下F#矩阵转置功能
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"
它工作正常。
(_ :: _):: _是什么意思?
我不明白整个代码!
谁能解释一下?
谢谢!
我找到了答案:
(_ :: _):: _是一个图案类型的值匹配整数列表的列表
如果我写:
let rec transpose (M:int list list) =
match M with
| hd::tl -> List.map List.head M :: transpose (List.map List.tail M)
| _ -> []
它会抛出运行时异常。 hd有什么问题吗?
是,使它像[[] [] []]当呼叫List.tail,则抛出异常时调用List.head!
问题解决了!
谢谢大家!
+1,很好的答案! – gradbot 2010-06-10 19:30:48