7

たとえば、その値の出現回数が添付された値の「圧縮された」ストリームがあります。

let a = [ (),1; (),4; (),3;]

そのシーケンスを「圧縮解除」して、元のシーケンスを出力したいと思います。生成する繰り返しコンビネータを定義できます! その趣旨で

let rec repeat avalue n =  seq { if n > 0 then 
                                    yield avalue; yield! repeat avalue (n-1) }

let b = seq { for v,n in a do
                yield! repeat v n }  |> Seq.toList

それをインラインでコンポジションの形で表現する方法はありますか?

let c = a |> Seq.XXX(fun e -> ...) 
4

3 に答える 3

6

次を使用してこれを行うことができますEnumerable.Repeat

> Seq.collect Enumerable.Repeat [ 1, 2; 3, 4; 5, 6 ] |> List.ofSeq;;
val it : int list = [1; 1; 3; 3; 3; 3; 5; 5; 5; 5; 5; 5]
于 2013-04-02T18:02:58.273 に答える