是否有意义有这样的功能定义从挤压元组(A,(B,C))至(A,B,C)中fsharp
let squash12 (e:('a*('b*'c) )) = e |> (fun (a,(b,c) ) -> (a,b,c ))
let squash21 (e:(('a*'b)*'c )) = e |> (fun ((a,b),c ) -> (a,b,c ))
let squash13 (e:('a*('b*'c*'d))) = e |> (fun (a,(b,c,d)) -> (a,b,c,d))
let seqsquash12 (sa:seq<'T>) = sa |> Seq.map squash12
let seqsquash21 (sa:seq<'T>) = sa |> Seq.map squash21
let seqsquash13 (sa:seq<'T>) = sa |> Seq.map squash13
我找不到另一种方法,使我核心代码递归(导致嵌套元组),但暴露映射到广义n维坐标的简单函数。
THKS。我注意到类型推断很慢(我只使用基本函数的更高阶的东西),所以我不妨指定它的类型,如果它加快了速度。 – nicolas 2012-03-02 10:17:19
@nicolas - 真的,我不认为类型推理很慢+这个版本在运行时会更快(避免函数调用) – 2012-03-02 10:21:07
@nicolas:请参阅我的答案,以获得一般情况下的建议。 – pad 2012-03-02 10:25:49