では、このような機能を持ってしても意味がないに(、(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
@nicolas - 実際には、タイプ推論が遅いとは思わない+このバージョンは実行時にはるかに高速になる(関数呼び出しを避ける) –
@nicolas:一般的なケースの提案については私の答えを見てください。 – pad